Phân phối từ xa một ứng dụng iOS được biên dịch trong Xcode 7 mà không có App Store, chương trình phụ của nhà phát triển hoặc bẻ khóa?


10

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.

  1. 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.
  2. 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? )
  3. 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.
  4. 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).
  5. Để ứ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.mobileprovisiontệ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? 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.)}
  6. 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à codesigncó 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? ký lại IPA (iPhone)từ chức ứng dụng iPhone, chèn ID gói mới và gửi đến Xcode Organizer để tải lênCá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-rulescờ đượ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ý.
  7. 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 malformedA 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?
  8. 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í.
  9. 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 xcrunthay vì xcodebuildtôi đã sử dụng.


1
Vui lòng xem xét việc chia nhỏ này. Câu hỏi nên ngắn gọn đơn giản và dễ hiểu. Tất cả câu trả lời / quy trình làm thế nào bạn nhận được câu trả lời và bài đăng trên blog của bạn nên có trong phần câu trả lời.
bmike

Câu trả lời:


2

Câu trả lời là gần như CÓ!

Tôi đã quản lý để cài đặt các bản dựng mới của cùng một ứng dụng trên các thiết bị thông qua Fabric.io mà không cần đăng ký apple dev. (Tôi đoán bạn cũng có thể phân phối chúng với iTunes. Gửi ipa cho người kiểm tra và nó sẽ có thể cài đặt nó qua iTunes.)

Nhược điểm duy nhất là bạn phải kết nối thiết bị với Xcode ít nhất một lần . Sau đó, bạn có thể cài đặt từ xa các phiên bản mới. (Tôi đã không tìm ra cách để làm điều đó bằng tay khi biết udid)

Khi bạn kết nối thiết bị "không xác định" với xcode 7, sẽ có một fix issuenút trong Target general settings. Khắc phục sự cố và Xcode sẽ tạo hồ sơ Cung cấp mới với thiết bị này đi kèm. (bạn có thể tìm thấy nó trong ~/Library/MobileDevice/Provisioning Profiles)

Hơn bạn có thể sử dụng hồ sơ cung cấp này để phân phối ứng dụng qua Fabric.io

  1. Đăng ký trên Fabric.io
  2. Cài đặt Fabric cho dự án của bạn (có hướng dẫn từng bước)
  3. Hãy chắc chắn rằng xcode sử dụng chứng minh đúng. hồ sơ để ký nó. Automaticđã làm cho tôi.
  4. Xcode> dự án> lưu trữ
  5. người trợ giúp vải sẽ phát hiện bản dựng và bạn sẽ có thể phân phối nó.

Xin lỗi những anh chàng không đủ thành thạo với Xcode, tôi không có nhiều thời gian để thêm hướng dẫn dễ bị lỗi, nhưng tôi hy vọng câu trả lời này sẽ giúp ai đó có ý tưởng.

MIPO : sử dụng plugin quicklook này để xem bên trong ipas và prov. hồ sơ!


1
Vâng, câu trả lời này phù hợp với những gì tôi tìm ra trong thử nghiệm của mình. Tôi vẫn tự hỏi liệu có thể khắc phục được việc "kết nối thiết bị với xcode ít nhất một lần không" bằng cách giả mạo thông điệp mà Xcode gửi đến máy chủ Apple bằng thiết bị mới UDID
ziggurism

2

Kể từ một số phiên bản iOS 9.x được phát hành kể từ khi câu trả lời của tôi ban đầu được đăng, đây không còn là một khả năng nữa. Apple hiện hạn chế tải xuống OTA vào các tài khoản không miễn phí, như được hiển thị bởi các lỗi trong nhật ký thiết bị khi cài đặt không thành công.

Tôi đã thử nghiệm điều này rộng rãi, vì điều này cũng sẽ tuyệt vời cho các ứng dụng của tôi.

Tôi có thể phân phối ứng dụng OTA của mình mà không cần Tư cách thành viên Chương trình dành cho nhà phát triển (chi phí tiền) không?

Bạn có thể tạo và ký IPA và tạo tệp Manifest cho nó, nhưng nó sẽ không cài đặt được trên thiết bị. Lý do cho điều này là Xcode cần cấu hình IPA cho thiết bị đó (được cho là đã ký hợp lệ với UDID). Bạn thậm chí có thể thấy điều này xảy ra nếu bạn cố gắng cắm thiết bị mới vào máy Mac và chạy ứng dụng của bạn thông qua Xcode trên đó. Câu trả lời ngắn gọn là không.

Tôi có thể làm gì để thực hiện công việc này?

Bạn có thể đăng ký Chương trình dành cho nhà phát triển với Apple (chi phí tiền) và thêm UDID của thiết bị của anh ấy vào hồ sơ của bạn, sau đó tạo IPA và tệp kê khai, tải chúng lên máy chủ web và gửi URL cho anh ấy.

Nó thực sự là để bảo mật, vì rào cản giá thường là thứ ngăn chặn các ứng dụng độc hại được phân phối trên web. Chưa kể giữ phần lớn lượt tải xuống ứng dụng trong App Store.

Tôi đã đăng ký chương trình dành cho nhà phát triển? Làm thế nào để tôi phân phối nó bây giờ?

Bạn phải có máy chủ web HTTPS (và chứng chỉ SSL mà bạn có thể tự tạo root cho mình). Bạn cũng phải thêm UDID của họ vào hồ sơ Nhà phát triển của mình (Tôi không chắc chắn chính xác cách thực hiện việc này). Bạn phải sử dụng Xcode để tạo IPA (Sản phẩm> Lưu trữ> Xuất> Lưu để triển khai đặc biệt> Đăng nhập bằng ID Apple> Làm theo hướng dẫn) và bạn sẽ nhận được tệp Plist và IPA. Đặt cả hai trên máy chủ của bạn và thay đổi các giá trị trong tệp Plist để khớp với các URL HTTPS trên máy chủ của bạn. Sau đó, bạn sử dụng một liên kết đặc biệt để liên kết đến bảng kê khai Plist và nó sẽ bật lên yêu cầu người dùng cài đặt ứng dụng của bạn. Nếu mọi thứ đều ổn, người dùng sẽ có ứng dụng của bạn. Bạn cũng phải mã hóa phương thức cập nhật của riêng bạn nếu bạn muốn điều đó.

Nếu đây là một ứng dụng bạn muốn phân phối vào thời điểm này, có thể có ý nghĩa hơn khi thực sự đưa nó lên App Store hoặc nếu đây là bản thử nghiệm beta, hãy sử dụng TestFlight. Nếu bạn có tài khoản nhà phát triển, bạn có thể sử dụng TestFlight và bỏ qua tất cả nội dung này để kiểm tra ứng dụng. Tất cả những gì bạn cần là email của họ và để họ cài đặt ứng dụng TestFlight từ App Store. TestFlight có thể được quản lý từ iTunes Connect.


Và một khi bạn đã đăng ký Nhà phát triển, làm thế nào để bạn phân phối ứng dụng?
ziggurism 8/11/2015

Cập nhật bài viết của tôi với các hướng dẫn.
AppleBetas

Cảm ơn bạn, đó là những gì tôi đang tìm kiếm. Tôi biết bạn nói rằng cần phải có tài khoản dev trả phí và cung cấp UDID, nhưng tôi muốn thử phương pháp này mà không cần trước. Tôi sẽ báo cáo lại kết quả.
ziggurism 8/11/2015

Làm theo hướng dẫn của bạn để tạo một kho lưu trữ, nhưng các nút "Tải lên cửa hàng ứng dụng", "xác thực" và "xuất khẩu" đều có màu xám, với một liên kết bên dưới có nội dung "Phân phối yêu cầu đăng ký vào Chương trình nhà phát triển của Apple". tôi đến một trang web để đăng ký ADP. Vì vậy, một mặt, như bạn đã hứa: đăng ký 99 đô la cho Chương trình nhà phát triển của Apple dường như là bắt buộc, ngay cả khi bạn chỉ muốn thực hiện phân phối quảng cáo trực tuyến (OTA) cho ứng dụng của mình. XCode gui sẽ không tạo IPA và hồ sơ cung cấp.
ziggurism

Mặt khác, tại stackoverflow.com/questions/26928721/ Người dùng Khawar tuyên bố rằng nó có thể được thực hiện mà không cần phụ ADP bằng cách sử dụng xcodebuilddòng lệnh sẽ tạo tệp lưu trữ .ipa cũng như ký và cung cấp ứng dụng nếu bạn sử dụng -exportProvisioningProfilecờ (xem bình luận của Pankaj Rathor).
ziggurism

1

Về cơ bản, ai đó phải ký ứng dụng. Bạn có thể lấy tệp IPA, nhưng nó sẽ không chạy trên các thiết bị tùy ý. Tập trung vào điều đó và bạn sẽ nhanh chóng quyết định xem bạn có muốn chịu đựng sự rắc rối của mỗi người khi sử dụng Xcode hoặc nếu trả tiền cho Apple để ký các ứng dụng của bạn có ý nghĩa hay không.

Nếu bạn đang dựa vào việc đăng nhập iOS 9 không dành cho nhà phát triển với bất kỳ Apple ID cũ nào, tất cả những người thử nghiệm của bạn đều cần đăng nhập bằng ID Apple của bạn để chạy ứng dụng.

Bạn có thể trả tiền cho Apple để xử lý các tài khoản và ký bằng cách trả tiền cho một năm tài khoản của nhà phát triển. Sau đó, bạn có thể gửi email, bật ứng dụng trên bất kỳ máy chủ nào, sử dụng TestFlight hoặc các phương pháp dễ dàng hơn cho bạn ngoài việc trao ID Apple cho người kiểm tra / người dùng ứng dụng của bạn.

Bạn luôn có thể gửi mã nguồn cho anh trai nếu anh ấy có Xcode, nhưng bạn đã đề cập rằng đó là điểm không có ai đó có máy Mac để cài đặt và ký ứng dụng.

Bẻ khóa dễ hơn giả mạo chuỗi chứng chỉ của Apple, nhưng tôi không khuyến nghị điều đó.


Người kiểm tra cần đăng nhập vào đâu bằng ID Apple của tôi, để chạy các ứng dụng đã ký không dành cho nhà phát triển?
ziggurism

Trong Xcode, sử dụng máy Mac của bạn là dễ nhất. Tôi muốn họ gửi cho bạn điện thoại của họ để tải ứng dụng nếu không thể truy cập Xcode ...
bmike

Vâng, cài đặt từ Xcode qua USB hoạt động rất tốt. Câu hỏi của tôi là về khả năng phân phối / cài đặt từ xa. StackExchange đã làm điều đó cho ứng dụng beta của họ. Tôi cũng muốn làm điều đó
ziggurism

@ziggurism SE trả tiền cho một chứng chỉ doanh nghiệp. Bạn sẽ cần một chút giấy tờ pháp lý để thực hiện điều đó. Cộng thêm vài trăm đô la hàng năm. TestFlight là tùy chọn rẻ hơn và ít màu xám hơn. Những gì SE đã không có khả năng "bằng cuốn sách" theo giấy phép cho các chứng chỉ mà họ đã sử dụng, nhưng tôi không phải là luật sư ...
bmike
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.