xcodebuild กล่าวว่าไม่มีแบบแผน


125

ฉันมีปัญหาอยากรู้อยากเห็น

ฉันมีโปรเจ็กต์ที่ฉันได้ทำและสร้างจาก XCode IDE มาโดยตลอดและมันก็ใช้ได้ดี ตอนนี้ฉันกำลังตั้งค่า Bamboo เพื่อสร้างโครงการและด้วยเหตุนี้ฉันจึงสร้างมันจากบรรทัดคำสั่ง

ปัญหาคือถ้าฉันตรวจสอบรหัสของฉันจาก GIT แล้วใช้ xcodebuild เพื่อสร้างมันบอกว่าไม่พบโครงร่าง แต่ถ้าฉันเปิดโครงการมันจะสร้างและถ้าฉันพยายามสร้างอีกครั้งจากบรรทัดคำสั่ง ด้วยคำสั่งเดียวกันมันใช้งานได้

XCode กำลังทำเวทมนตร์อะไรเมื่อฉันเปิดโปรเจ็กต์หรือฉันทำอะไรโง่ ๆ อาจจะไม่รวมไฟล์ใน. gitignore ที่ฉันไม่ควรทำ


เพิ่งสังเกตว่าเมื่อฉันเปิดโปรเจ็กต์ใน xcode จะสร้างไฟล์. xcscheme แต่อยู่ในโฟลเดอร์ xcuserdata / username.xcuserdatad ... แต่ฉันไม่เข้าใจว่าทำไมโครงร่างถึง 'สร้าง' ใต้โฟลเดอร์ผู้ใช้ .. และฉันเป็นอย่างไร จะจัดการมันด้วยไม้ไผ่
Zac Tolley

คำตอบ:


187

คุณมาถูกทางแล้วเกี่ยวกับไฟล์. xcscheme - ฉันมีปัญหานี้ปรากฏขึ้นขณะตั้งค่าโครงการของตัวเอง!

สำหรับคนรุ่นหลังหรืออย่างน้อยใครก็ตามที่เดินทางมาที่นี่จากการค้นหานี่คือสองเวอร์ชัน - เวอร์ชัน "ฉันไม่ว่างดังนั้นขอแค่ข้อเท็จจริง" และการอภิปรายและเหตุผลที่เกี่ยวข้องมากกว่า ทั้งสองเวอร์ชันนี้ถือว่าคุณกำลังพยายามสร้างจากไฟล์ Workspace ถ้าคุณไม่เป็นเช่นนั้นขอโทษของฉันเนื่องจากส่วนใหญ่ใช้กับโครงการที่ใช้พื้นที่ทำงาน

เวอร์ชัน 'Fix-it' แบบย่อ

สาเหตุที่แท้จริงคือลักษณะการทำงานเริ่มต้นของ Schemes คือการเก็บแบบแผนไว้เป็น "ส่วนตัว" จนกว่าจะมีการระบุว่าเป็นแบบใช้ร่วมกันโดยเฉพาะ ในกรณีของการสร้างบรรทัดคำสั่ง Xcode UI จะไม่ทำงานและเครื่องมือ xcoderun ไม่มีแคชของ Schemes ที่จะใช้งานได้ เป้าหมายคือการสร้างแบ่งปันและยอมรับโครงการที่คุณต้องการให้ Bamboo ดำเนินการ:

  1. บนสำเนาที่ใช้งานได้อย่างสมบูรณ์ของรหัสให้เปิดพื้นที่ทำงานของโครงการ
  2. เลือก Scheme> Manage Schemes ... จากเมนูผลิตภัณฑ์
  3. รายการ Schemes ที่กำหนดไว้สำหรับโครงการจะปรากฏขึ้น
  4. ค้นหา Scheme Bamboo ที่พยายามเรียกใช้
  5. ตรวจสอบให้แน่ใจว่ามีการทำเครื่องหมายในช่อง "ใช้ร่วมกัน" สำหรับโครงร่างนั้นและการตั้งค่า "คอนเทนเนอร์" ถูกตั้งค่าเป็นพื้นที่ทำงานไม่ใช่ไฟล์โครงการ
  6. คลิก 'OK' เพื่อปิดแผ่นงาน Manage Schemes
  7. ไฟล์. xcscheme ใหม่ถูกสร้างขึ้นในโปรเจ็กต์ของคุณที่ WorkspaceName.xcworkspace / xcshareddata / xcschemes
  8. คอมมิตไฟล์นี้กับที่เก็บของคุณและเรียกใช้งาน Bamboo build

การอภิปรายและเหตุผลที่ลึกซึ้งยิ่งขึ้น

Xcode 4 เปิดตัว Workspaces and Schemes เพื่อช่วยในการพยายามควบคุมความวุ่นวายบางอย่างที่เกิดขึ้นจากการจัดการกับกลไกของโครงการ Xcode ที่เกี่ยวข้องกับการเดินสายสร้างเป้าหมายและสร้างการกำหนดค่าร่วมกัน พื้นที่ทำงานเองมีชุดข้อมูลการกำหนดค่าของตัวเองซึ่งอธิบายถึง 'กล่อง' ขนาดเล็กแต่ละกล่องที่มีและทำหน้าที่เป็นโครงกระดูกสำหรับการแนบไฟล์. xcodeproj และชุดของข้อมูลการกำหนดค่าที่ใช้ร่วมกันซึ่งจะสะท้อนไปยังเครื่องของนักพัฒนาหรือระบบ CI แต่ละเครื่อง . นี่เป็นทั้งพลังและข้อผิดพลาดของพื้นที่ทำงาน - มี 1) หลายวิธีที่สามารถกำหนดค่าสิ่งต่าง ๆ ได้อย่างถูกต้อง 100% แต่ใส่ลงในคอนเทนเนอร์ที่ไม่ถูกต้องหรือ 2) ใส่ลงในคอนเทนเนอร์ที่ถูกต้อง แต่กำหนดค่าไม่ถูกต้องจึงแสดงผลข้อมูล ไม่สามารถเข้าถึงได้โดยส่วนอื่น ๆ ของระบบ!

ลักษณะการทำงานเริ่มต้นของโครงร่าง Xcode 4 คือการสร้างโครงร่างใหม่โดยอัตโนมัติเมื่อมีการเพิ่มโปรเจ็กต์ลงในไฟล์ Workspace พวกคุณที่เพิ่มไฟล์. xcodeproj หลายไฟล์อาจสังเกตเห็นว่ารายการโครงร่างของคุณไม่ราบรื่นอย่างรวดเร็วโดยเฉพาะอย่างยิ่งเมื่อมีการเพิ่มไฟล์โครงการจากนั้นนำออกจากนั้นอ่านไปยังพื้นที่ทำงานเดียวกัน โครงร่างทั้งหมดที่สร้างขึ้นโดยอัตโนมัติหรือสร้างขึ้นเองโดยค่าเริ่มต้นจะเป็นโครงร่าง "ส่วนตัว" เท่านั้นที่ผู้ใช้ปัจจุบันจะมองเห็นได้แม้ว่าไฟล์. xcuserdata จะถูกผูกมัดกับข้อมูลและการกำหนดค่าของโครงการก็ตาม นี่คือต้นตอของข้อผิดพลาดการสร้างที่เป็นความลับรายงาน Bamboo จาก xcodebuild - เนื่องจาก Bamboo ดำเนินการสร้างผ่านบรรทัดคำสั่งไม่ใช่ Xcode UI จึงไม่มีโอกาสที่ Schemes จะสร้างขึ้นโดยอัตโนมัติและอาศัยเฉพาะสิ่งที่ ถูกกำหนดไว้ในพื้นที่ทำงานเอง

xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

xcodebuild ค้นหาไฟล์ <'scheme' Parameter Value> .xcscheme ที่มีอยู่ที่ <'workspace' Parameter Value> / xcshareddata / xcschemes

เห็นได้ชัดว่ามีหลายวิธีที่สามารถกำหนดค่าทั้ง Bamboo และพื้นที่ทำงานได้ดังนั้นโปรดทราบว่าการกำหนดค่าเฉพาะของคุณอาจไม่ได้จับคู่ 100% กับสิ่งที่นำเสนอที่นี่ ประเด็นสำคัญ:

  1. งานอัตโนมัติบางอย่างที่ Xcode UI ดูแลอย่างน่าอัศจรรย์ไม่สามารถใช้ได้ผ่าน Xcodebuild CLI
  2. คุณสามารถแนบโครงร่างและสร้างข้อมูลการกำหนดค่าไปยังหลาย ๆ ที่ใน 'ลำดับชั้นของคอนเทนเนอร์' - ตรวจสอบให้แน่ใจว่าข้อมูลของคุณอยู่ในคอนเทนเนอร์ที่ถูกต้อง (พื้นที่ทำงานโครงการและ / หรือเป้าหมายการสร้าง)
  3. พิจารณาตำแหน่งในลำดับชั้นคอนเทนเนอร์ที่เครื่องมือ xcodebuild อาจกำลังมองหาข้อมูลการกำหนดค่า ตัวบ่งชี้ที่ดีว่าจะเริ่มค้นหาที่ใดนั้นขึ้นอยู่กับการใช้อาร์กิวเมนต์ '-workspace' หรือ '-project'

มีการเลือกช่อง "แชร์" แล้ว ... ตอนนี้เป็นอย่างไร

ฉันพบปัญหาเดียวกันนี้ในอินสแตนซ์ Bamboo ของตัวเอง ปรากฎว่าโครงร่างที่ถูกคอมมิตในที่เก็บของฉันล้าสมัยและเครื่องมือบรรทัดคำสั่งเวอร์ชันล่าสุดไม่สามารถจัดการได้อย่างสง่างาม เนื่องจากสิ่งนี้มีอยู่ก่อนหน้านี้ฉันได้ตรวจสอบการตั้งค่าเพื่อให้แน่ใจว่าไม่มีอะไรที่ชัดเจนเกี่ยวกับโครงร่างลบและสร้างโครงร่างใหม่เพื่อให้แน่ใจว่าฉันทำเครื่องหมายเป็น 'แชร์' และแนะนำไฟล์. xcscheme ใหม่ไปยัง กรุ

หากทุกอย่างดูดีและการสร้างใหม่ไม่สามารถแก้ปัญหาได้ให้ตรวจสอบการตั้งค่าคอนเทนเนอร์นั้นอีกครั้ง - มันง่ายมากที่จะนำโครงร่างนั้นไปแนบกับคอนเทนเนอร์ที่ไม่ถูกต้องในลำดับชั้น!


สิ่งนี้แก้ไขข้อผิดพลาด xcodebuild แบบสุ่มสำหรับฉันซึ่งส่งคืนข้อผิดพลาด NO แต่รหัสออก 65 ปรากฎว่าคอนเทนเนอร์ถูกตั้งค่าเป็นโปรเจ็กต์ไม่ใช่พื้นที่ทำงานเองเปลี่ยนและ voila แก้ไขปัญหาได้ ขอบคุณ
Simon Lee

ขอบคุณ! นี่คือการแก้ไขที่ฉันกำลังมองหา
raidfive

ตัวเลือกการทดสอบและการเก็บถาวรของฉันถูกปิดใช้งานนั่นเป็นเพราะเหตุนี้ ฉันได้ตรวจสอบโครงการของฉันร่วมกัน ยังไม่สามารถสร้างผ่านบอทได้ฉันสามารถสร้างในเครื่องได้ แต่อย่างที่บอกว่าฉันไม่สามารถเก็บถาวรได้ คุณคิดว่ามันเกี่ยวข้องกับปัญหานี้หรือไม่
Alix

ขอบคุณ! การตั้งค่าโครงร่างคอนเทนเนอร์ไปยังพื้นที่ทำงานของฉันช่วยแก้ไขปัญหาที่ฉันพบในการสร้าง TeamCity ของฉัน
แบบ

วิธีค้นหาสคีมาจากข้อความนี้ ฉันได้รับข้อความนี้ทุกประการ [xcodebuild: error: พื้นที่ทำงานชื่อ "jamesAppV2" ไม่มีรูปแบบชื่อ "" สามารถใช้ตัวเลือก "-list" เพื่อค้นหาชื่อของโครงร่างในพื้นที่ทำงาน]
Qadir Hussain

52

แก้ไขปัญหาดังนี้:

xcodebuild -list

หรือหากคุณกำลังใช้พื้นที่ทำงาน (เช่นกับพ็อด)

xcodebuild -workspace MyProject.xcworkspace -list

หากแผนของคุณไม่อยู่ในรายการแก้ไขดังนี้:

ใส่คำอธิบายภาพที่นี่


การแบ่งปันแผนการช่วยให้พวกเขาปรากฏในxcodebuild -list... ขอบคุณ!
Dan Rosenstark

35

คำตอบส่วนใหญ่จะแนะนำให้คุณสร้างโครงร่างของคุณร่วมกันโดยใช้ Xcode จากนั้นจึงทำการเปลี่ยนแปลงกับ repo แน่นอนว่าได้ผล แต่ก็ต่อเมื่อคุณสามารถเข้าถึงซอร์สโค้ดและมีสิทธิ์ในการเปลี่ยนแปลงและสมมติฐานอื่น ๆ อีกสองสามข้อ

แต่มี " สิ่งที่ควรพิจารณา" หลายประการ

  • จะเกิดอะไรขึ้นถ้าคุณไม่สามารถแก้ไขโครงการ Xcode ได้ด้วยเหตุผลบางประการ?
  • จะเกิดอะไรขึ้นถ้าคุณสร้างโครงร่างใหม่โดยอัตโนมัติบนเซิร์ฟเวอร์ CI
    สิ่งนี้เกิดขึ้นบ่อยมาก หากคุณใช้กรอบการทดสอบอัตโนมัติเช่น Calabash โดยปกติคุณจะต้องทำซ้ำเป้าหมายที่มีอยู่ซึ่งจะทำซ้ำโครงร่างโดยอัตโนมัติเช่นกันและจะไม่มีการแชร์โครงร่างใหม่แม้ว่าโครงร่างเดิมจะเป็นก็ตาม

ทับทิมและอัญมณี xcodeproj

ฉันอยากจะแนะนำให้ใช้อัญมณีxcodeproj Ruby นี่เป็นเครื่องมือโอเพ่นซอร์สที่ยอดเยี่ยมมากที่สามารถช่วยคุณทำงานที่เกี่ยวข้องกับ Xcode ได้โดยอัตโนมัติ

Btw นี่คืออัญมณีที่CocoaPods ใช้เพื่อยุ่งกับโครงการ Xcode และพื้นที่ทำงานของคุณ

ดังนั้นติดตั้ง

sudo gem install xcodeproj

จากนั้นเขียนสคริปต์ Ruby ง่ายๆเพื่อแชร์โครงร่างทั้งหมดอีกครั้งอัญมณีมีวิธีการสร้างใหม่ _user_schemesเพื่อจุดประสงค์นั้น

#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save

ไม่เพียงแค่คัดลอกไฟล์แบบแผนจากโฟลเดอร์ของผู้ใช้ไปยังxcshareddata / xcschemesเท่านั้น แต่ยังสร้างไฟล์เหล่านั้นก่อนโดยการแยกวิเคราะห์ไฟล์pbxproj


1
ในกรณีที่คนอื่นสะดุดดูเหมือนว่าrecreate_user_schemesจะไม่จัดการกับเป้าหมายการทดสอบอย่างถูกต้อง ฉันได้ยื่นรายงานข้อบกพร่องเกี่ยวกับเรื่องนี้
Matt Kantor

ฉันเขียนบล็อกเกี่ยวกับเรื่องนี้ nsbogan.com/xcode/2014/05/29/share-xcode-schemes ขออภัยที่ปัญหาเกี่ยวกับการทดสอบหน่วยยังไม่ได้รับการแก้ไข
i4niac

ฉันลองวิธีนี้แล้ว แต่เมื่อฉันเรียกใช้xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"ฉันได้รับ 'Scheme <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> ถูกขอให้สร้างและเก็บถาวร แต่ปลายทางการรัน <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> ไม่ใช่แพลตฟอร์มการปรับใช้และการดำเนินการนี้ไม่ควรมี ได้รับอนุญาต '. แต่เมื่อฉันเปิด XCode ทุกอย่างก็ใช้ได้ดี
ІгарЦімошка

2
archiveการดำเนินการเกี่ยวข้องกับการลงนามเสมอและต้องตั้งค่าปลายทางเป็นอุปกรณ์จริง ในกรณีของคุณปลายทางคือiPad 2ซึ่งฉันคิดว่าเป็นการจำลองดังนั้นจึงไม่สามารถเก็บถาวรได้ มีตัวเลือกสำคัญตัวหนึ่งที่ขาดหายไปจากคำสั่งของคุณ-sdk iphoneosลองทำก่อนแล้วดูว่าเป็นอย่างไร เมื่อคุณเรียกใช้จาก Xcode IDE คุณอาจตั้งค่าปลายทางเป็นiOS Deviceหรือบางทีคุณอาจมีอุปกรณ์จริงเสียบอยู่ดังนั้นจึงตั้งเป็นปลายทาง นั่นเป็นเหตุผลที่การเก็บถาวรทำงานจาก IDE บรรทัดคำสั่งมีความ "โง่" มากกว่าและบางครั้งอาจใช้ตัวเลือก "ผิด" โดยค่าเริ่มต้นดังนั้นคุณต้องเจาะจงมากขึ้น
i4niac

1
สิ่งนี้ควรได้รับการโหวตมากขึ้น - ขอบคุณ! โครงการ Calabash ที่มีเฟรมเวิร์ก Swift ไม่สามารถสร้างด้วย XCode6.1.1 ได้เนื่องจากคุณต้องสร้างจากโครงร่าง อัญมณีนี้ยอดเยี่ยมมาก
เดวิด


3

สาเหตุทั่วไปประการหนึ่งที่ทำให้โครงการหายไปคือการลืมที่จะผลักดันการกระทำไปยังจุดเริ่มต้น หากคุณได้รับข้อความชุดรูปแบบที่ขาดหายไปคุณควรตรวจสอบก่อนว่ามีการแชร์โครงร่างจากนั้นตรวจสอบว่าคุณได้ยอมรับการเปลี่ยนแปลงและส่งไปยังเซิร์ฟเวอร์ต้นทาง


1

ฉันพบข้อผิดพลาดนี้ขณะใช้งาน CI คำถามข้างต้นเหมือนกับปัญหาของฉันยกเว้นฉันใช้เครื่องมือ CI ของ Gitlab คุณสามารถตรวจสอบว่ามีไฟล์ดังกล่าวใน Bamboo หรือไม่
ฉันแก้ไขได้โดยทำการเปลี่ยนแปลงบางอย่างกับgitlab-ci.ymlไฟล์
หลังจากที่คุณทำประโยชน์schemeโดยการแบ่งปัน ใน Xcode ไปที่Products>Scheme>Manage Schemeและตรวจสอบการแชร์เพื่อแบ่งปัน

การเปลี่ยนแปลง

กำหนดเส้นทางที่แน่นอนทุกที่
เช่น. xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
ที่นี่คุณต้องเปลี่ยน/path/to/your/project/เส้นทางและtestDemoชื่อโครงการของคุณ


0

มีปัญหาเดียวกัน แต่ในระหว่างการสร้าง xcode เป็นโครงการย่อยของรายการหลัก สร้างโครงการย่อยใน xcode แบบสแตนด์อโลน - หลังจากนั้นข้อผิดพลาดนี้ก็หายไป


0

ฉันประสบปัญหานี้และแม้ว่าบางคำตอบที่นี่จะให้คำตอบจริง แต่ฉันก็ไม่พบว่ามันชัดเจนนัก ดังนั้นฉันจะเพิ่มอีกหนึ่ง สรุปวิธีแชร์สคีมาจาก excode

นำทางไปProduct> Scheme>Manage Schemes

ใส่คำอธิบายภาพที่นี่

จากนั้นคุณจะเห็นรายการของโครงร่างโดยแต่ละรายการจะแสดงว่ามีการแชร์หรือไม่ เพียงตรวจสอบสิ่งที่คุณต้องการแชร์ (อาจเป็นคนละคนกับ dev และ prod builds)

ใส่คำอธิบายภาพที่นี่

ภาพที่นำมาจากบทความนี้https://developer.nevercode.io/docs/sharing-ios-project-schemes


0

ฉันต้องการเพิ่มโซลูชันสำหรับกรณีของฉันที่เกี่ยวข้องกับเธรดนี้ อันนี้สำหรับคุณที่โคลนโปรเจ็กต์ที่มีอยู่โดยมีการแชร์โครงร่างทั้งหมดที่คุณต้องการอยู่แล้ว:

ใส่คำอธิบายภาพที่นี่

พร้อมfastlane lanesแสดงเลนทั้งหมดของคุณอย่างถูกต้องรวมถึงโครงร่างทั้งหมดของคุณ:

ใส่คำอธิบายภาพที่นี่

แต่fastlane gymแสดงเฉพาะโครงร่างหลัก (ไม่ใช่โครงร่างการพัฒนาและการทดสอบ):

ใส่คำอธิบายภาพที่นี่

การแก้ปัญหาคือการยกเลิกการเลือกตัวเลือกที่ใช้ร่วมกันสำหรับรูปแบบที่ไม่ได้ระบุไว้โดยfastlane gymและจากนั้นตรวจสอบอีกครั้ง มันจะสร้าง. xcscheme สำหรับโครงร่าง:

ใส่คำอธิบายภาพที่นี่

ตอนนี้หากคุณตรวจสอบด้วยfastlane gymโครงร่างทั้งหมดจะแสดงรายการ:

ใส่คำอธิบายภาพที่นี่

จากนั้นคุณควรส่งไฟล์. xcshemes เหล่านั้นไปยังที่เก็บดังนั้นนักพัฒนารายอื่นที่โคลนโครงการจะได้รับไฟล์


0

สำหรับใครก็ตามที่มี Xcode 11.4 พยายามค้นหาปุ่ม "แชร์" ในโครงร่างตอนนี้จะย้ายไปไว้ในแต่ละแบบแผน

  1. เลือกรูปแบบที่คุณต้องการ
  2. กด "แก้ไข"
  3. เลือกช่อง "แชร์"

Scheme Edit ประกอบด้วย Shared Box ทันที

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.