Bạn chắc chắn đang đi đúng hướng đối với tệp .xcscheme - Tôi đã gặp sự cố này khi thiết lập các dự án của riêng mình!
Đối với hậu thế, hoặc ít nhất là bất cứ ai đến đây từ một tìm kiếm, đây là hai phiên bản của sự việc - phiên bản "Tôi đang bận, vì vậy chỉ là sự thật xin vui lòng" và một cuộc thảo luận và lý do liên quan nhiều hơn. Cả hai phiên bản này đều cho rằng bạn đang cố gắng xây dựng từ tệp Workspace; nếu bạn không xin lỗi thì điều này chủ yếu áp dụng cho các dự án dựa trên không gian làm việc.
Phiên bản 'Fix-it' cô đọng
Nguyên nhân sâu xa là hành vi mặc định của Scheme là giữ cho các lược đồ 'riêng tư' cho đến khi chúng được đánh dấu cụ thể là được chia sẻ. Trong trường hợp xây dựng dòng lệnh được khởi tạo, UI Xcode không bao giờ chạy và công cụ xcoderun không có bộ đệm Scheme riêng để làm việc. Mục tiêu là tạo, chia sẻ và cam kết chương trình bạn muốn Tre chạy:
- Trên một bản sao làm việc sạch của mã, hãy mở không gian làm việc của Dự án.
- Chọn lược đồ> Quản lý lược đồ ... từ Menu sản phẩm.
- Danh sách các Đề án được xác định cho dự án xuất hiện.
- Xác định vị trí Đề án Tre đang cố gắng chạy
- Đảm bảo hộp 'Chia sẻ' được chọn cho sơ đồ đó và cài đặt 'Container' được đặt thành Không gian làm việc chứ không phải chính tệp dự án.
- Nhấp vào 'OK' để loại bỏ bảng Quản lý lược đồ.
- Một tệp .xcscheme mới đã được tạo trong dự án của bạn tại WorkspaceName.xcworkspace / xc Shareddata / xcscheme.
- Cam kết tệp này vào kho lưu trữ của bạn và chạy bản dựng Tre.
Thảo luận sâu hơn và Cơ sở lý luận
Xcode 4 đã giới thiệu Không gian làm việc và Lược đồ như một cách giúp thử và chế ngự một số hỗn loạn vốn có để xử lý các cơ chế của các dự án Xcode liên quan đến dây, xây dựng mục tiêu và xây dựng cấu hình cùng nhau. Bản thân không gian làm việc có tập dữ liệu cấu hình riêng mô tả từng 'hộp' dữ liệu nhỏ hơn mà nó chứa và hoạt động như một bộ xương để đính kèm các tệp .xcodeproj và một tập hợp dữ liệu cấu hình được chia đôi cho mỗi máy phát triển hoặc hệ thống CI . Đây là cả sức mạnh và cạm bẫy của Không gian làm việc - có 1) rất nhiều cách để người ta có thể cấu hình chính xác 100%, nhưng đưa vào vùng chứa sai hoặc 2) đưa vào vùng chứa chính xác, nhưng được định cấu hình không chính xác do đó hiển thị dữ liệu không thể truy cập bởi các bộ phận khác của hệ thống!
Hành vi mặc định của các lược đồ Xcode 4 là tự động tạo các lược đồ mới khi các dự án được thêm vào tệp Workspace. Những người bạn đã thêm một số tệp .xcodeproj có thể nhận thấy rằng danh sách lược đồ của bạn nhanh chóng trở nên phi lý đặc biệt là khi các tệp dự án được thêm vào, sau đó được xóa và sau đó được gắn lại vào cùng một không gian làm việc. Tất cả các lược đồ, được tạo tự động hoặc được tạo thủ công, mặc định là các lược đồ 'riêng tư' chỉ hiển thị cho người dùng hiện tại ngay cả khi các tệp .xcuserdata được cam kết với dữ liệu và cấu hình của dự án. Đây là nguyên nhân sâu xa của lỗi xây dựng mật mã đó mà Tre báo cáo từ xcodebuild - Vì Tre vận hành việc xây dựng thông qua dòng lệnh chứ không phải UI Xcode, nên nó không có cơ hội để Scheme tự động tạo và chỉ dựa vào những thứ đó được định nghĩa trong chính không gian làm việc.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild tìm kiếm tệp <'lược đồ' Giá trị tham số> .xcscheme hiện có tại <'không gian làm việc' Giá trị tham số> / xc Shareddata / xcscheme.
Rõ ràng có rất nhiều cách để người ta có thể định cấu hình cả Tre và không gian làm việc, vì vậy hãy nhớ rằng cấu hình duy nhất của bạn có thể không ánh xạ 100% với những gì được trình bày ở đây. Các bài học quan trọng:
- Một số tác vụ tự động nhất định mà Xcode UI chăm sóc một cách kỳ diệu không có sẵn thông qua Xcodebuild CLI.
- Bạn có thể đính kèm sơ đồ và xây dựng dữ liệu cấu hình cho nhiều nơi trong 'phân cấp vùng chứa' - Đảm bảo dữ liệu của bạn được cuộn vào đúng vùng chứa (Vùng làm việc, Dự án và / hoặc Mục tiêu xây dựng)
- Xem xét vị trí trong phân cấp vùng chứa, công cụ xcodebuild có thể đang tìm kiếm dữ liệu cấu hình; một chỉ báo tuyệt vời về nơi nó sẽ bắt đầu tìm kiếm dựa trên việc sử dụng các đối số '-workspace' hoặc '-project'.
Hộp 'Chia sẻ' đã được chọn ... bây giờ thì sao?
Tôi đã gặp vấn đề tương tự trên ví dụ Tre của riêng tôi; Hóa ra lược đồ đã cam kết trong kho lưu trữ của tôi đã lỗi thời và phiên bản mới nhất của các công cụ dòng lệnh không xử lý nó một cách duyên dáng. Vì điều này đã tồn tại trước đó, tôi đã xem qua các cài đặt để đảm bảo rằng không có bất kỳ tùy chỉnh nào về sơ đồ, đã xóa và tạo lại lược đồ đảm bảo rằng tôi đã đánh dấu nó là 'Được chia sẻ' và giới thiệu tệp .xcscheme mới cho kho.
Nếu mọi thứ đều ổn và xây dựng lại nó không giải quyết được vấn đề, hãy kiểm tra kỹ cài đặt vùng chứa đó - thực sự dễ dàng để có sơ đồ đó được gắn vào vùng chứa sai trong hệ thống phân cấp!