Sau những hướng dẫn này (xem thêm tài liệu nhà phát triển của Apple và câu trả lời BoltClock để ứng dụng thử nghiệm iOS trên thiết bị mà không cần chương trình phát triển táo hay jailbreak ), tôi đã có thể biên dịch một ứng dụng iOS (trong trường hợp này nguồn gốc , một video game ứng dụng giao diện điều khiển giả lập mà không làm đáp ứng các nguyên tắc của Apple và sẽ không bao giờ được phép trong App Store của Apple) trong Xcode 7, ký tên với tài khoản iCloud cá nhân của tôi, tải nó vào iPhone của tôi (bằng cách cắm nó vào máy Mac của tôi bằng USB và chọn iPhone của tôi trong menu xcode -> Sản phẩm -> Đích) và cho phép điện thoại của tôi thực thi ứng dụng bằng cách "tin tưởng" các ứng dụng có chữ ký này trong Cài đặt -> Chung -> Cấu hình, cài đặt chứng chỉ được liên kết với tài khoản icloud của tôi trên thiết bị.
Tôi muốn sao chép các bước này với bản tải xuống qua mạng. Tôi có thể lấy Xcode để tạo một tệp thực thi mà tôi có thể chia sẻ với anh trai tôi, người có iPhone, nhưng không có quyền truy cập vào Mac với Xcode không?
Mạng StackExchange đã hoàn thành một cái gì đó giống như thế này cho chương trình beta ứng dụng iOS của mình, bằng cách sử dụng phân phối doanh nghiệp của Apple thông qua Quản lý thiết bị di động, như đã đề cập trong câu hỏi này . Ngoài ra còn có BuildStore ( http://builds.io/ ), với giá 10 đô la / năm cũng cho phép chức năng này, rõ ràng bằng cách thêm người dùng vào "nhóm nhà phát triển" được liên kết với tài khoản Chương trình dành cho nhà phát triển Apple phải trả tiền (xem tài liệu dành cho nhà phát triển của Apple ) . Với Xcode 7, có thể thực hiện một việc như vậy mà không cần doanh nghiệp hoặc thậm chí tài khoản nhà phát triển trả phí thông thường không?
cập nhật: Nhờ sự giúp đỡ của Stacksza, tôi đã đạt được một số tiến bộ, mà tôi sẽ tóm tắt ở đây.
- XCode sẽ tạo một kho lưu trữ (Sản phẩm -> Lưu trữ), nhưng nó không cho phép bạn xuất một tệp lưu trữ sang tệp .ipa để phân phối ad hoc mà không cần đăng ký vào lớp tài khoản ADP phải trả tiền.
- Không có vấn đề tuy nhiên, vì công cụ xcode dòng lệnh không tạo ra một thực thi .ipa, thậm chí không có tài khoản ADP trả. Sử dụng một lệnh như
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(xem câu trả lời của Khawar tại Cách tạo ipa trong xcode 6 mà không cần tài khoản Nhà phát triển của Apple? ) - Nhưng lệnh này yêu cầu bạn chỉ định tệp .plist tệp kê khai. Câu trả lời của Razvan tại phân phối tệp IPA iOS Over Over Air (OTA) cho công chúng? chứa một manifest.plist mẫu, cũng như các hướng dẫn cho định dạng siêu liên kết cần thiết để cung cấp liên kết tải xuống, phải được lưu trữ trên trang web SSL. Có thể là URL SSL phải tính toán id gói của ứng dụng, tôi không chắc chắn.
- Nhưng những điều trên chỉ hoạt động nếu ứng dụng được cung cấp cho thiết bị tải xuống và thiết bị đã cài đặt chứng chỉ dành cho nhà phát triển. Vì vậy, ví dụ, một thiết bị trước đây được kết nối qua USB với Xcode của tôi giờ đây có thể tải xuống ứng dụng qua mạng, điều này thật tuyệt. Đây là sự tiến bộ. Nhưng đối với các thiết bị sạch, tôi gặp lỗi
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
(như được xem trong bảng điều khiển của thiết bị, có thể được xem trong Xcode -> Window -> Devices, hoặc các ứng dụng khác trong ứng dụng Trình cấu hình Apple). - Để ứng dụng được cung cấp cho thiết bị, ứng dụng cần chứa UDID của thiết bị trong
embedded.mobileprovision
tệp, xem Làm thế nào để bạn nhúng Hồ sơ cung cấp trong Ứng dụng iOS , Làm cách nào để tự động kiểm tra một trường trong nhúng.mobileprovision của ipa? , Làm thế nào để tìm hiểu hồ sơ nào đã được sử dụng để xây dựng tệp * .ipa? và Có cách nào để xem UDID được bao gồm trong bản dựng không? . Tuy nhiên, bạn không thể chỉnh sửa tệp này để thêm UDID, vì sau đó CODESIGNATURE của ứng dụng không khớp và thiết bị sẽ báo lỗiFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
- Ok, vì vậy chúng tôi cần phải từ chức ứng dụng. Xcode cung cấp một công cụ dòng lệnh được gọi là
codesign
có thể làm điều này. Hướng dẫn tại Làm thế nào để đăng nhập lại tệp ipa? và ký lại IPA (iPhone) và từ chức ứng dụng iPhone, chèn ID gói mới và gửi đến Xcode Organizer để tải lên và Cách đăng nhập lại IPA theo cách thủ công với hồ sơ cung cấp mới . Tôi đã phải chỉ định chứng chỉ nhà phát triển của mình, tên chính xác có thể tìm thấy trong Keychain Access, trong tab Chứng chỉ và trông giống như "Nhà phát triển iPhone: username@mac.com (ABCDEFGHIJ)". Sau đó, lệnh là như thếcodesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app
. Các lệnh ví dụ trong các hướng dẫn ở trên bao gồm một cờ được gọi là--resource-rules
, nhưng tôi không tìm thấy tệp nào trong ứng dụng được biên dịch của mình, vì vậy tôi đã xóa cờ đó. Tôi tự hỏi những gì nó làm, và liệu nó là cần thiết. Chỉnh sửa: Bài đăng trên blog tuyệt vời Ký mã bên trong của Thomas Kollbach giải thích rằng--resource-rules
cờ được sử dụng để nói rõ phần nào của ứng dụng phải được ký, nhưng vì iOS8 không được chấp nhận và toàn bộ ứng dụng phải được ký. - Bây giờ ứng dụng đã thêm UDID và được ký, tải xuống trên thiết bị mới sẽ báo lỗi
Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed
vàA valid provisioning profile for this executable was not found
. Tôi đoán vấn đề bây giờ là thiết bị vẫn chưa cài đặt chứng chỉ nhà phát triển. Khi tải thông qua Xcode, trước khi ứng dụng thực thi, bạn phải tìm chứng chỉ đã cài đặt trong Cài đặt -> Chung -> Hồ sơ, chọn chứng chỉ của bạn và nhấn "tin cậy". Tuy nhiên, tùy chọn này không xuất hiện sau khi tải xuống không thường xuyên của ứng dụng ad hoc, vì vậy tôi không chắc chắn cách tiến hành. Tôi nghĩ rằng tôi cần một số cách để cài đặt chứng chỉ nhà phát triển trên thiết bị. Theo Cài đặt hồ sơ cung cấp trên iOS 8.0.2, điều này từng có thể thực hiện được bằng cách gửi email chứng chỉ đến thiết bị, nhưng điều đó không còn hoạt động kể từ iOS 8. Tôi chưa thử xác nhận. Làm cách nào tôi có thể cài đặt chứng chỉ nhà phát triển của mình lên thiết bị iOS từ xa? - Tôi đã thử xuất chứng chỉ nhà phát triển iPhone của mình từ Keychain Access và gửi email đến thiết bị. Thiết bị có thể cài đặt chứng chỉ, nhưng nó hiển thị với cảnh báo màu đỏ rằng nó chưa được ký, trong khi đó, chứng chỉ được cài đặt qua Xcode / USB không có cảnh báo như vậy. Theo Rhy tiếtic Fistman tại có thể mã hóa lại một tập tin nhúng.mobileprovision? , hồ sơ phải được ký bởi Apple để làm việc. Đây có thể là điểm dính. Apple sẽ chỉ ký chứng nhận của bạn nếu bạn có tài khoản ADP trả phí.
- Bài đăng trên blog này về việc cung cấp bởi Sean Heber đã rất sáng tỏ về lý thuyết chung về chứng chỉ nhà phát triển và hồ sơ cung cấp (cùng với Kollbach, cả hai nên được yêu cầu đọc). Nó chứa đoạn này:
Lý do tất cả những điều này hoạt động và an toàn là Apple tạo ra các hồ sơ cung cấp trong cổng thông tin và sau đó ký chúng bằng các khóa riêng của họ trước khi gửi chúng cho bạn. Việc ký kết các hồ sơ cung cấp là điều mà chỉ Apple mới có thể làm được. Do đó, tệp bạn tải xuống không thể bị giả mạo mà không khiến nó không hợp lệ. Cấu hình cung cấp không hợp lệ sẽ không được iOS chấp nhận và do đó Apple có thể kiểm soát chính xác những gì nhà phát triển có thể và không thể cung cấp bằng cách đơn giản giới hạn quyền truy cập vào việc ký hồ sơ cung cấp đối với những thứ mà cổng nhà phát triển cho phép bạn định cấu hình trước địa điểm - mặc dù hồ sơ cung cấp có thể hỗ trợ bất kỳ số lượng tùy chọn tuyệt vời nào khác mà bạn không thể sử dụng mà không cần bẻ khóa. Đây là lý do tại sao bạn phải đăng ký thiết bị thử nghiệm trong cổng thông tin, thêm chứng chỉ của bạn vào cổng, v.v. - chỉ những thứ trong cổng thông tin (và do đó, số lượng có thể được kiểm soát và giới hạn tùy ý bởi Apple) có thể được đưa vào hồ sơ cung cấp được ký và tạo đúng. Cổng thông tin là nơi các chính sách và giới hạn cung cấp của Apple thực sự được thi hành.
Điều này dường như trả lời dứt khoát câu hỏi của tôi (tôi có thể chạy ứng dụng mà không cần tài khoản ADP trả phí không) bằng "không". Mặc dù bài viết này có trước Xcode 7. Rõ ràng Xcode 7 sẽ gửi UDID của thiết bị đến cổng thông tin của Apple và nhận được phản hồi về hồ sơ cung cấp có chữ ký của Apple, có chứa UDID đó. Xcode 7 chỉ thực hiện điều này khi thiết bị được cắm qua USB và được Xcode nhận ra, nhưng người ta tự hỏi liệu một yêu cầu Xcode thủ công cho Apple có thể được tạo ra không? Điều đó càng đi sâu vào công cụ đảo ngược của Apple hơn là tôi cảm thấy thoải mái và có thể vi phạm ToS hoặc bất cứ điều gì, vì vậy tôi nghĩ rằng tôi hài lòng với câu trả lời "không".
Theo trang giới thiệu về BuildStore , họ quản lý một cái gì đó tương tự qua email, vì vậy điều đó có thể xảy ra.
Xcode có thể xây dựng và lưu trữ trên mạng từ dòng lệnh khá cũ (xcode 3), nhưng gợi ý sử dụng xcrun
thay vì xcodebuild
tôi đã sử dụng.