【问题标题】:Codesigning iOS applications (APNS Enabled) without using XCode在不使用 XCode 的情况下对 iOS 应用程序进行代码设计(启用 APNS)
【发布时间】:2013-03-09 02:42:01
【问题描述】:

我想构建一个单窗口 Mac 应用程序,它可以用于在不使用 XCode 的情况下对 iOS 应用程序进行代码设计。

我们的许多客户使用“企业许可证”来分发他们的应用程序。每年他们都需要辞职,这是一项重复性的工作。他们的要求如下

  1. 应用使用 APNS
  2. 他们不想共享企业许可证
  3. 在使用证书签名时,捆绑标识符应该是可替换的
  4. 他们在钥匙串中有同名的证书

用户界面有以下字段

  1. *.ipa 文件的路径
  2. *.mobileprovision 文件的路径
  3. 钥匙串名称(可选,以防存在多个同名证书)
  4. 证书名称(iPhone 开发者:.....)

能够共同设计应用程序,但辞职后APNS无法正常工作。还是不能使用 bundleIdentifier 退出应用程序?

此外,我还想添加 Keychain 中可用证书下拉列表的功能,以提高可用性。任何指针都会有很大帮助

【问题讨论】:

  • @AnoopVaidya 是否可以在不使用 XCode 的情况下使用 APNS 对应用程序进行代码设计?
  • 你可以通过命令行进行代码签名,但相信我,你不会想要的。
  • 不,不是通过命令行,我正在尝试使用内置代码设计工具,通过 NSTask 使用它并提供非常简单的 UI。我能够辞职可以安装在 iOS 设备中的应用程序。问题在于推送通知

标签: ios objective-c xcode macos code-signing


【解决方案1】:

要启用推送通知,应用 ID 和配置文件需要经过 Apple 配置和允许(通过门户)。您无法通过辞职为任意配置文件/应用启用它。

在协同设计期间,权利需要将 apns-environment 键设置为 sandbox/production,具体取决于应用使用的内容。这将在运行时由 iOS 进行验证。如果您使用的是第三方签名工具,它应该从配置文件中获取 apns-environment 值。

对于调试,您可以使用以下命令查看 .app 的权利:

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

您应该会看到 apns-environment 值,但前提是配置文件启用了该值。

【讨论】:

  • 感谢您的回复。正如您提到的,AppId 和 mobileprovision 是按照标准配置的。要求是使用有效的 mobileprovision 辞职,该 mobileprovision 可能具有或不具有与前一个相同的 appId。因此,如果我可以从我的 mobileprovision 中获取 appid 和权利,并将其提供给 codesign 任务。该应用程序应该已成功进行代码签名,不是吗?
  • 应该可以,是的。我们经常使用我们开发的内部脚本来做这种事情。您基本上需要更新 Info.plist(使用新的应用程序 ID)、权利(通过代码签名)和应用程序内的 Embedded.mobileprovision。只要这一切都正确完成,它应该可以工作。
  • 那太好了,事实上我也是独立完成的。我从 mobileprovision 中提取了 plist 提取了应用程序标识符,然后复制了 info.plist,然后更改了 CFBundleIdentifier 并使用权利信息对应用程序进行了代码设计。它现在可以工作了,但这一切似乎都非常骇人听闻。我已经接受了你的回答。再次感谢。
  • 这可能看起来很老套,但您可以使用正确的脚本和工具自动化整个过程。该过程完全合法,并且正是 Xcode 在对您的应用程序进行代码设计时所做的事情。虽然有趣的是 Xcode 并没有修改权利。
  • 如果我的要求不高,您能否指出任何指向代码设计工具的有效链接。
【解决方案2】:

刚刚花了几个小时研究同样的问题并发现了以下过程。让 Mike 的 cmets 更进一步,为遇到相同问题的其他人提供以下命令行。

我开始使用已为生产推送通知配置的捆绑 ID 构建 xcode 发布版本。

从终端窗口运行以下命令 - 用您的信息替换“CAPITAL SECTIONS”

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"

希望这可以帮助下一个遇到同样问题的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多