2013-03-09 35 views
5

Tôi muốn xây dựng một ứng dụng Mac cửa sổ đơn, có thể được sử dụng để mã hóa các ứng dụng iOS mà không cần sử dụng XCode.Codesigning ứng dụng iOS (APNS Enabled) mà không sử dụng XCode

Nhiều khách hàng của chúng tôi sử dụng "Giấy phép doanh nghiệp" để phân phối ứng dụng của họ. Mỗi năm họ cần phải từ chức và một công việc lặp đi lặp lại của nó. yêu cầu của họ đang theo dõi

  1. Apps tận dụng APNS
  2. Họ không muốn chia sẻ Enterprise Giấy phép họ
  3. định danh Bundle nên có thể thay thế khi đăng ký với giấy chứng nhận của họ
  4. Họ có giấy chứng nhận với cùng một tên trong Keychain

diện người dùng có các lĩnh vực sau

  1. Đường dẫn đến * .ipa nộp
  2. Đường dẫn đến tập tin * .mobileprovision
  3. tên Keychain (không bắt buộc trong trường hợp nhiều hơn một giấy chứng nhận với cùng một tên tồn tại)
  4. Tên của giấy chứng nhận (iPhone Developer: .. ...)

tôi đã thể codesign ứng dụng, nhưng APNS không hoạt động sau khi từ chức. Hoặc là không thể từ chức các ứng dụng sử dụng bundleIdentifier?

Và tôi cũng muốn thêm tính năng danh sách thả xuống chứng chỉ có sẵn trong Keychain để cải thiện khả năng sử dụng. Bất kỳ con trỏ nào cũng sẽ trợ giúp tuyệt vời

+0

Vì vậy ?????? ?????? –

+0

@AnoopVaidya Có thể mã hóa các ứng dụng sử dụng APNS mà không sử dụng XCode không? – Anupdas

+1

Bạn có thể viết mã thông qua dòng lệnh, nhưng tin tưởng tôi, bạn không muốn. – CodaFi

Trả lời

2

Để bật thông báo đẩy, ID ứng dụng và hồ sơ cấp phép sẽ cần phải được cấu hình và cho phép bởi Apple (thông qua cổng thông tin). Bạn không thể kích hoạt nó cho hồ sơ cấp phép tùy ý/ứng dụng chỉ bằng cách từ chức.

Trong quá trình mã hóa, quyền lợi cần có khóa apns-environment được đặt thành sandbox/production tùy thuộc vào ứng dụng sử dụng. Điều này sau đó sẽ được xác minh khi chạy iOS. Nếu bạn đang sử dụng công cụ ký của bên thứ ba, thì phải lấy giá trị apns-environment từ hồ sơ cấp phép.

Để gỡ lỗi, bạn có thể nhìn vào quyền lợi cho một .app bằng lệnh này:

codesign -d --requirements - --entitlements - path/to/My.app 

Bạn sẽ thấy một giá trị apns-environment, nhưng chỉ khi cấp phép hồ sơ có mà kích hoạt.

+0

Cảm ơn bạn đã trả lời. Như bạn đã đề cập đến AppId và mobileprovision được cấu hình theo các tiêu chuẩn. Yêu cầu là từ chức với một mobileprovision hợp lệ có thể hoặc có thể không có cùng một appId như trước đó. Vì vậy, nếu tôi có thể lấy appid và quyền lợi từ mobileprovision của tôi, và cung cấp cho nó để codesign nhiệm vụ. Ứng dụng phải được mã hóa thành công, phải không? – Anupdas

+0

Nó sẽ hoạt động, có. Chúng tôi làm điều này rất nhiều với các kịch bản nội bộ mà chúng tôi đã phát triển. Về cơ bản, bạn cần cập nhật Info.plist (với id ứng dụng mới), các quyền (thông qua codesigning) và embedded.mobileprovision bên trong ứng dụng. Miễn là tất cả được thực hiện một cách chính xác, nó sẽ hoạt động. –

+0

Đó là tuyệt vời, Infact tôi đã làm như vậy một cách độc lập. Tôi trích xuất plist từ mobileprovision trích xuất các ứng dụng nhận dạng và sau đó thực hiện một bản sao của info.plist và sau đó thay đổi CFBundleIdentifier và sử dụng các thông tin quyền lợi để codesign ứng dụng. Nó bây giờ hoạt động, nhưng tất cả dường như rất hackish. Tôi đã chấp nhận câu trả lời của bạn. Cảm ơn một lần nữa. – Anupdas

1

Chỉ cần dành vài giờ nghiên cứu cùng một vấn đề này và phát hiện quy trình sau. Lấy ý kiến ​​của Mike thêm một bước nữa, cung cấp dòng lệnh sau cho những người khác đang chạy vào cùng một vấn đề.

Tôi bắt đầu với bản dựng xcode bằng cách sử dụng id gói đã được định cấu hình cho thông báo đẩy sản xuất.

Từ cửa sổ terminal chạy các lệnh sau - thay thế "PHẦN VỐN" với thông tin của bạn

codesign -d --entitlements -"NAME OF APP.app" > entitlements.plist 

codesign -f -s "SIGNING CERTIFICATE NAME" --resource-rules "NAME OF APP.app/ResourceRules.plist" --entitlements entitlements.plist "NAME OF APP.app" 

Hope this helps người tiếp theo phải vật lộn với cùng một vấn đề này

Các vấn đề liên quan