远程分发以Xcode 7编译的iOS应用程序,而无需App Store,开发人员程序子程序或越狱?


10

按照这些说明(另请参阅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的帮助下,我取得了一些进展,我将在这里进行总结。

  1. XCode将创建一个存档(产品->存档),但不允许您将存档导出到.ipa文件以进行临时分发,而无需订阅付费的ADP帐户层。
  2. 不过没问题,因为即使没有付费的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回答
  3. 但是此命令要求您指定清单.plist文件。Razvan在无线(OTA)iOS IPA文件发布中的答案是否公开?包含示例manifest.plist,以及提供下载链接所需的超链接格式的说明,这些链接必须托管在SSL网页上。我不确定SSL URL是否必须对应用程序的捆绑包ID进行数学计算。
  4. 但是,只有在为下载该设备的设备配置了该应用程序且该设备已经安装了开发人员证书的情况下,以上方法才有效。因此,例如以前通过USB连接到我的Xcode的设备现在可以通过空中下载该应用程序,这很棒。这是进步。但是对于干净的设备,我会收到错误消息Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(在设备控制台中查看,可以在Xcode-> Window-> Devices或Apple Configurator应用程序中查看)。
  5. 对于要为设备配置的应用程序,它需要在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.)}
  6. 好的,所以我们需要退出应用程序。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已弃用,因此必须对整个应用程序进行签名。
  7. 现在,该应用已添加UDID并已签名,然后将其下载到新设备上会显示错误Could not install embedded profile: 0xe8008003 (This provisioning profile is malformedA valid provisioning profile for this executable was not found。我认为现在的问题是设备仍未安装开发人员证书。通过Xcode侧载时,在执行该应用之前,您必须在“设置”->“常规”->“配置文件”中找到已安装的证书,选择您的证书,然后点击“信任”。但是,在无线下载临时应用后,该选项不会出现,因此我不确定如何继续。我想我需要某种方法在设备上安装开发人员证书。根据在iOS 8.0.2上安装预配配置文件,以前可以通过将证书通过电子邮件发送到设备来实现,但从iOS 8开始该功能不再起作用。我没有尝试确认。如何将开发人员证书远程安装到iOS设备上?
  8. 我尝试从“钥匙串访问”中导出我的iPhone开发人员证书,然后通过电子邮件将其发送到设备。该设备能够安装证书,但显示红色警告,表明该证书未签名,而通过Xcode / USB安装证书时则没有此类警告。根据Rhythmic Fistman的说法,可以重新加密Embedded.mobileprovision文件吗?,配置文件必须由Apple签名才能使用。这可能是症结所在。如果您拥有付费的ADP帐户,Apple只会在您的证书上签名。
  9. 肖恩·希伯(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我一直使用的。


1
请考虑将其拆分。这个问题应该简短易懂。有关答案和博客文章的所有答案/过程均应在答案部分中。
bmike

Answers:


2

答案几乎是肯定的!

我设法通过Fabric.io在设备上安装了同一个应用程序的新版本,而没有苹果开发人员的订阅。(我想您也可以通过iTunes分发它们。将ipa发送到测试仪,它应该能够通过iTunes安装它。)

唯一的缺点是您必须至少将设备连接到Xcode 一次。然后,您可以远程安装新版本。(我知道被告没有找到手动做的方法)

当您将“未知”设备连接到xcode 7时,中有一个fix issue按钮Target general settings。解决此问题,Xcode将生成一个包含此设备的新Provisioning配置文件。(您可以在中找到它~/Library/MobileDevice/Provisioning Profiles

比您可以使用此配置文件通过Fabric.io分发应用程序

  1. 在Fabric.io上注册
  2. 为您的项目设置Fabric(有逐步指南)
  3. 确保xcode使用正确的证明。个人资料进行签名。Automatic为我工作。
  4. Xcode>项目>存档
  5. Fabric帮助程序将检测到构建,您将能够分发它。

抱歉,那些对Xcode不够熟练的人,我没有太多时间来添加较少的容易出错的指南,但是我希望这个答案对有人有所帮助。

提示:使用 quicklook 插件可以查看ipas和prov。个人资料!


1
是的,这个答案与我在测试中发现的一致。我仍然想知道是否有可能通过欺骗Xcode使用新设备UDID发送到Apple服务器的消息来绕过“至少将设备连接到xcode一次”的问题
ziggurism

2

自最初发布我的答案以来,从iOS 9.x的某些版本开始,这甚至不再是可能。Apple现在将OTA下载限制为非免费帐户,如安装失败后设备日志中的错误所示。

我已经对此进行了广泛的测试,因为这对于我的应用程序也将是惊人的。

我是否可以在没有开发人员计划成员资格的情况下OTA分发我的应用程序(费用)?

您可以创建和签名IPA并为其创建清单文件,但是它将无法安装在设备上。原因是Xcode需要为该设备配置IPA(应该使用UDID正确签名)。如果您尝试将新设备插入Mac并通过Xcode在其上运行您的应用,甚至可以看到这种情况。最简洁的答案是不。

我该怎么做才能使这项工作?

您可以使用Apple注册开发人员计划(需要花钱),然后将其设备的UDID添加到您的个人资料中,然后创建IPA和清单文件,将其上传到Web服务器并发送给他URL。

确实是为了安全,因为价格壁垒通常是阻止恶意应用程序通过网络分发的原因。更不用说将大多数应用下载保留在App Store中。

我已经注册了开发者计划?我现在该如何分发?

您必须具有HTTPS Web服务器(以及可以自己创建根目录的SSL证书)。您还必须将其UDID添加到您的开发者资料中(我不确定如何执行此操作)。您必须使用Xcode创建IPA(产品>存档>导出>保存以用于临时部署>使用Apple ID登录>按照说明进行操作),您将获得一个Plist和一个IPA文件。将它们都放在服务器上,并更改Plist文件中的值以匹配服务器上的HTTPS URL。然后,使用特殊链接链接到Plist清单,然后弹出该对话框,要求用户安装您的应用。如果一切正常,用户将拥有您的应用程序。如果需要,还必须编写自己的更新方法。

如果这是您此时要分发的应用,那么将其实际放置在App Store上可能更有意义,或者如果要进行Beta测试,请使用TestFlight。如果您拥有开发者帐户,则可以使用TestFlight并跳过所有这些内容以进行应用测试。您只需要他们的电子邮件,并让他们从App Store安装TestFlight应用即可。可以从iTunes Connect管理TestFlight。


一旦您注册了开发人员,您将如何分发该应用程序?
Ziggurism,2015年

使用说明更新了我的帖子。
AppleBetas

谢谢,这就是我想要的。我知道您说有必要拥有一个付费的开发者帐户和预配置UDID,但是我想先尝试这种方法。我将报告结果。
Ziggurism,2015年

按照创建存档的说明进行操作,但是“上传至应用程序商店”,“验证”和“导出”按钮均显示为灰色,下面的链接显示为“分发需要注册Apple Developer Program”我进入网页以注册ADP。因此,一方面,这就是您所承诺的:即使您只想对应用程序进行无线(OTA)临时分发,似乎也需要99美元的Apple Developer Program订阅费。XCode gui不会创建IPA和配置文件。
Ziggurism

在另一方面,在stackoverflow.com/questions/26928721/...用户Khawar声称它可以在没有ADP子使用来完成xcodebuild,这将创建的.ipa归档以及标志和提供应用程序的命令行,如果你使用的-exportProvisioningProfile标志(请参见Pankaj Rathor的评论)。
Ziggurism

1

基本上,必须有人签署应用程序。您可以获取IPA文件,但该文件不能在任意设备上运行。专注于此,您将迅速决定是否要忍受使用Xcode的每个人的麻烦,或者为Apple签署应用程序而付钱是合理的。

如果您依靠带有任何旧Apple ID的iOS 9非开发人员签名,则测试人员都需要使用Apple ID登录才能运行该应用程序。

您可以通过支付一年的开发者帐户费用来支付Apple处理帐户和签名的费用。然后,除了将Apple ID分发给测试人员/应用程序用户外,您还可以通过电子邮件发送,在任何服务器上弹出该应用程序,使用TestFlight或使用其他更简便的方法。

如果您的兄弟拥有Xcode,您始终可以将源代码发送给您的兄弟,但是您提到那是没有人安装Mac并对其进行签名的关键。

越狱比伪造苹果的证书链更容易,但是我不建议这样做。


测试人员需要在哪里登录我的Apple ID才能运行未经开发人员签名的应用程序?
Ziggurism

在Xcode中,使用Mac最简单。如果无法访问Xcode,我会让他们发送手机以加载该应用程序……
bmike

是的,通过USB通过Xcode安装效果很好。我的问题是关于远程分发/安装的可能性。StackExchange为其Beta版应用程序做了此操作。我也想做
ziggurism

@ziggurism SE为企业证书付费。您需要一些法律文书才能实现这一目标。加上每年几百美元。TestFlight是更便宜的选择,并且没有灰色区域。根据他们使用的证书的许可证,SE所做的不太可能“按书”,但我不是律师...
bmike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.