在iOS设备上从自托管的URL下载并安装IPA文件

56

我需要从URL直接下载和安装一个ipa文件。

我已经尝试过这个方法:

NSURL *url = [NSURL URLWithString:@"https://myWeb.com/test.ipa"];
[[UIApplication sharedApplication] openURL:url];

这个应用程序会启动Safari,但随后出现以下错误消息:

下载失败,Safari无法下载此文件。

这是可能的吗?


据我所知,您无法直接将IPA安装到设备上。不过,您可以查看一下TestFlight - vzwick
你的方法不正确。让我给你一个合适的答案。 - Balram Tiwari
你使用哪个配置文件来编译ipa,开发者还是发布? - Satheesh
1
将您的ipa上传到Diawi,将生成的URL发送到您的电子邮件中,然后打开邮件,在Safari中单击URL,应该会打开安装应用程序的页面。 - Bharat
1
请检查Beta Builder。理想情况下,我们不应该将我们的工作上传到第三方服务器。我一直在使用Beta Builder,并且所有的ipa和生成的工作都在本地。您只需要将文件上传到您的分发服务器或像DropBox、Amazon S3或您的本地服务器这样的帐户即可。 - Balram Tiwari
9个回答

152

为了通过空中分发(OTA,这意味着不使用TestFlight或正式的App Store)发布您的应用程序,您可能需要创建3个不同的文件,分别是:

  • .ipa文件(使用Ad-hoc预配配置文件)
  • index.html
  • manifest.plist

有关更多信息,请参见https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web

您可以寻找服务来为您生成这些文件,也可以手动完成。

index.html

<a href="itms-services://?action=download-manifest&url=https://myWeb.com/MY_TEST_APP/manifest.plist">安装应用</a>

manifest.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>http://YOUR_SERVER_URL/YOUR-IPA-FILE.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.yourCompany.productName</string>
                <key>bundle-version</key>
                <string>1.0.0</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>YOUR APP NAME</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

如果应用程序无法安装或运行,您可能需要检查以下项目:

  • 编译/归档应用程序时使用的配置文件
  • index.htmlmanifest.plist中的URL
  • plist文件可能需要托管在HTTPS服务器上。如果需要,您可以使用Dropbox。
  • 除非您拥有企业许可证,否则您的设备UUID可能需要在Apple Developer Center内注册
  • 您可能需要手动在“设置”>“个人资料”中启用对应用程序的访问权限

@Hiren:请确保使用正确的配置文件(可能是adhoc-Provisioning profile)生成.ipa文件。这将解决问题。请确保您正在下载到已在开发者帐户上注册UUID的设备上。(因此,请在测试设备上尝试此操作。) - Balram Tiwari
5
我已经编辑了你的答案,加入了更多细节和一个 index.html 的示例。希望这样可以。 - Simon East
1
@Austin:这取决于您使用的开发者帐户证书/配置文件类型来分发应用程序。如果您通过企业帐户($299)进行分发,则可以放心,因为任何拥有链接的人都可以下载应用程序,但是如果使用普通的$99开发者帐户,则仍需要添加设备并将其包含在配置文件中。 - Balram Tiwari
1
@BalramTiwari 给定的下载测试版本生成器的链接已经失效,请修复。 - MANISH PATHAK
1
苹果公司的最新指南(截至2022年10月):https://support.apple.com/guide/deployment/distribute-proprietary-in-house-apps-depce7cefc4d/web - Shawn Erquhart
显示剩余13条评论

16
更简单的方法是使用DropBox来实现。步骤基本保持不变。 您可以执行以下操作-:
1)上传您的.ipa文件到DropBox,分享该.ipa的链接
2)在您的manifest.plist文件中粘贴共享的.ipa链接,再次上传manifest文件到DropBox并分享该.plist文件的链接
3)将此Plist的链接粘贴到您的index.html文件中,并加上适当的标记。
与任何可以点击URL并下载的人分享此index.html文件,或者您也可以直接访问该URL。

2
它不起作用。我所做的是将所有东西上传到我的S3存储桶而不是Dropbox,然后它就可以工作了。 - Alqama Bin Sadiq
@AlqamaBinSadiq,你在S3使用了哪个URL?我是指在上传到S3之后,你是如何调用它的。 - Bhupesh
我在使用GCE存储桶时遇到了相同的问题 - 但在Dropbox上可以正常工作。 - evanjmg
@naga:我模糊地记得你可能需要在Dropbox设置中打开“允许下载”或类似的选项,这样Dropbox才会让你下载它。 - Vkharb
企业发行证书中需要对ipa进行签名吗? - Amin Rezaew
显示剩余2条评论

6

其他可以帮助解决这个问题的服务包括AbbaShare(https://github.com/mabuonomo/abbashare_web)、AppHost(https://appho.st)和Hockey(https://hockeyapp.net)。 - SMX

4

Xcode8企业账户的答案

  1. 勾选“包含清单plist复选框”,并提供所需链接,导出.ipa文件。

  2. 将.ipa文件和.plist文件上传到服务器的同一位置(在导出.ipa时提供/在.plist文件中提到的位置)。

  3. 按以下方式创建下载链接。URL应链接到您的.plist文件位置。

    itms-services://?action=download-manifest&url=https://yourdomainname.com/app.plist

  4. 将此链接复制并粘贴到iPhone的Safari浏览器中。它会要求您安装 :D

使用此完整URL创建html按钮


4

有在线工具可以简化这个分享过程,例如https://abbashare.comhttps://diawi.com。使用adhoc或inhouse profile从xcode创建ipa文件,然后将此文件上传到这些网站中。我更喜欢使用abbashare,因为它可以将文件保存在您的Dropbox中,并且您可以随时删除它。


1
abbashare 帮助我上传文件。 - Anton Kashpor

1
如果您希望直接从您的网站下载并安装应用程序是不可能的。企业有一种不同的方式来通过空中部署和安装应用程序。您的URL应该指向托管在预定义格式所需的清单plist文件的Web服务。该服务应返回清单文件的URL,然后可以使用如下:
NSString *urlString = // url string where your manifest.plist is deployed on your server.
NSURL *installationURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-services://?action=download-manifest&url=%@",[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
[[UIApplication sharedApplication] openURL];

希望这回答了你的问题。

1

现在有更多新的工具可用,具有更多新功能来分发甚至管理您的项目和应用程序(ipa和apk),在我看来https://appforshare.io是最近的新工具,除了分发 ad-hoc 或开发构建之外,还有很多其他功能。


0
NSURL *url = [NSURL URLWithString:@"itms-services://?action=download-manifest&amp;url=https://xxxxxx.com/rest/images/apps/ipa/dev/xyz.plist"]];
[[UIApplication sharedApplication] openURL:url];

openUrl方法已经弃用

[[UIApplication sharedApplication] openURL: url options:@{} completionHandler:nil];

这个方法latest会打开openUrl方法并显示提示对话框。对话框将显示

xxxxxx.com想要安装“YOUR_APP_NAME”

这条消息。如果您点击“安装”按钮,应用程序将关闭并下载ipa。


-4
创建一个运行Windows的虚拟机,并将文件下载到共享文件夹中。:-D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接