按照这些说明(另请参阅Apple的开发人员文档和BoltClock 对在没有Apple开发人员程序或没有越狱的情况下在设备上测试iOS应用程序的回答),我能够编译一个iOS应用程序(在本例中为起源),而该应用程序没有符合Apple的准则,并且永远不会在Apple的App Store中使用)在Xcode 7中使用我的个人iCloud帐户签名,将其侧面加载到我的iPhone(通过USB将其插入Mac,然后在xcode菜单中选择我的iPhone->产品) ->目标),并允许我的手机通过在设置->常规->配置文件中对此签名“信任”应用程序来执行它,该操作会将与我的icloud帐户关联的证书安装到设备上。
我想通过空中下载复制这些步骤。是否可以让Xcode生成可执行文件,并与我的兄弟共享,该兄弟拥有iPhone,但是无法使用Xcode访问Mac?
该StackExchange网络来完成这样的事情显然是其iOS应用程序的测试计划,由通过移动设备管理使用苹果的企业分布,在提到这个问题。还有一个BuildStore(http://builds.io/),每年花费10美元也可以启用此功能,显然是通过将用户添加到与付费Apple Developer Program帐户关联的“开发人员团队”来进行的(请参阅Apple dev docs) 。使用Xcode 7,是否可以在没有企业或什至没有正式付费开发人员帐户的情况下进行此类操作?
更新: 在Stacksza的帮助下,我取得了一些进展,我将在这里进行总结。
- XCode将创建一个存档(产品->存档),但不允许您将存档导出到.ipa文件以进行临时分发,而无需订阅付费的ADP帐户层。
- 不过没问题,因为即使没有付费的ADP帐户,命令行xcode工具也确实创建了.ipa可执行文件。使用类似的命令
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(请参阅如何在没有Apple Developer帐户的情况下在xcode 6中创建ipa的 Khawar回答?) - 但是此命令要求您指定清单.plist文件。Razvan在无线(OTA)iOS IPA文件发布中的答案是否公开?包含示例manifest.plist,以及提供下载链接所需的超链接格式的说明,这些链接必须托管在SSL网页上。我不确定SSL URL是否必须对应用程序的捆绑包ID进行数学计算。
- 但是,只有在为下载该设备的设备配置了该应用程序且该设备已经安装了开发人员证书的情况下,以上方法才有效。因此,例如以前通过USB连接到我的Xcode的设备现在可以通过空中下载该应用程序,这很棒。这是进步。但是对于干净的设备,我会收到错误消息
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
(在设备控制台中查看,可以在Xcode-> Window-> Devices或Apple Configurator应用程序中查看)。 - 对于要为设备配置的应用程序,它需要在
embedded.mobileprovision
文件中包含设备的UDID ,请参阅如何在iOS应用程序中嵌入配置文件,如何自动检查ipa的Embedded.mobileprovision中的字段?,如何找出用于构建* .ipa文件的配置文件?,有没有办法查看构建中包含哪些UDID?。但是,您不能仅编辑此文件以添加UDID,因为应用程序的CODESIGNATURE不匹配,并且设备将报告错误。Failed 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.)}
- 好的,所以我们需要退出应用程序。Xcode提供了一个命令行工具
codesign
,可以做到这一点。有关说明,请参见如何重新签名ipa文件?和辞职IPA(iPhone)和辞职的iPhone应用程序,插入新的包ID,发送给Xcode的组织者上传和如何手动与新的供应配置文件重新签署IPA。我必须指定我的开发人员证书,其确切名称可以在“证书”选项卡下的“钥匙串访问”中找到,并且看起来像“ iPhone开发人员:username@mac.com(ABCDEFGHIJ)”。然后的命令就像codesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app
。上面说明中的示例命令包括一个名为--resource-rules
,但在编译的应用程序中没有找到这样的文件,因此我删除了该标志。我想知道它是做什么的,是否有必要。编辑: Thomas Kollbach 出色的博客文章Inside Code Signing(内部代码签名)解释说,该--resource-rules
标志曾经用于声明必须对应用程序的哪些部分进行签名,但是由于iOS8已弃用,因此必须对整个应用程序进行签名。 - 现在,该应用已添加UDID并已签名,然后将其下载到新设备上会显示错误
Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed
和A valid provisioning profile for this executable was not found
。我认为现在的问题是设备仍未安装开发人员证书。通过Xcode侧载时,在执行该应用之前,您必须在“设置”->“常规”->“配置文件”中找到已安装的证书,选择您的证书,然后点击“信任”。但是,在无线下载临时应用后,该选项不会出现,因此我不确定如何继续。我想我需要某种方法在设备上安装开发人员证书。根据在iOS 8.0.2上安装预配配置文件,以前可以通过将证书通过电子邮件发送到设备来实现,但从iOS 8开始该功能不再起作用。我没有尝试确认。如何将开发人员证书远程安装到iOS设备上? - 我尝试从“钥匙串访问”中导出我的iPhone开发人员证书,然后通过电子邮件将其发送到设备。该设备能够安装证书,但显示红色警告,表明该证书未签名,而通过Xcode / USB安装证书时则没有此类警告。根据Rhythmic Fistman的说法,可以重新加密Embedded.mobileprovision文件吗?,配置文件必须由Apple签名才能使用。这可能是症结所在。如果您拥有付费的ADP帐户,Apple只会在您的证书上签名。
- 肖恩·希伯(Sean Heber)撰写的有关供应的博客文章非常启发了开发人员证书和供应配置文件的一般理论(以及柯尔巴赫的知识,都应该同时阅读)。它包含以下段落:
所有这些工作之所以有效且安全的原因是,Apple在门户中生成了配置文件,然后在将其交付给您之前使用其自己的私钥对其进行了签名。供应配置文件的签名是只有Apple可以做的事情。因此,在不使下载的文件无效的情况下,无法对其进行篡改。无效的配置文件不会被iOS接受,因此Apple可以通过仅限制对配置文件签名的访问权限来限制开发人员门户在第一个配置中允许您配置的内容,从而控制开发人员可以配置和不能配置的内容。位置-即使配置配置文件可以支持您无法越狱就无法使用的许多其他令人敬畏的选项。这就是为什么您必须在门户中注册测试设备的原因,将您的证书添加到门户,等等-只有门户中的内容(因此,Apple可以控制和限制其任意数量)可以包含在生成的并正确签名的配置文件中。门户是实际执行Apple的供应策略和限制的地方。
这似乎可以肯定地回答我的问题(是否可以在没有付费ADP帐户的情况下运行该应用程序)?尽管本文早于Xcode7。显然,Xcode 7会将设备的UDID发送到Apple门户,并作为响应接收由Apple签名的包含该UDID的配置文件。Xcode 7仅在通过USB插入设备并被Xcode识别时才执行此操作,但是有人想知道是否可以向Apple发送手动的Xcode请求吗?这比我不适应的更深入地进行了Apple产品的逆向工程,并且可能违反了ToS或其他任何规定,因此我认为我对“否”的回答感到满意。
根据BuildStore的关于页面,他们可以通过电子邮件类似地进行管理,因此有可能。
命令行中的Xcode“构建和存档”已经很老了(大约xcode 3),但是建议使用xcrun
而不是xcodebuild
我一直使用的。