iPhone 应用程序是否可以不通过应用商店下载?

201
如果我在我的 Mac 上创建一个应用程序,有没有办法让它在iPhone上运行而不必在应用商店中发布?即使需要越狱iPhone也没关系,只要我能够使用官方SDK创建的应用程序仍然可以运行。出于某些原因,我不能通过应用商店发布此程序。

1
从Xcode 7开始,现在可以在连接设备上运行应用程序,而无需注册开发者帐户或越狱设备。有关详细信息,请参见此指南:https://dev59.com/MHVC5IYBdhLWcg3wlyMo#33928777。 - Suragch
您可以使用AppBox,这是一款Mac应用程序,它使用您的Dropbox帐户来分发您的Ad-hoc和企业应用程序。在此处尝试https://github.com/vineetchoudhary/AppBox-iOSAppsWirelessInstallation/releases - Vineet Choudhary
9个回答

187

官方开发者计划

对于标准版iPhone,您需要支付每年99美元的费用成为开发者计划会员。然后,您可以使用adhoc系统将您的应用程序安装到多达100个设备上。开发者计划有详细信息,但涉及将每个设备的UUID添加到您的应用程序包中。可以使用App Store提供的Ad Hoc Helper轻松获取UUID。有关此方法的更多详细信息,请参见Craig Hockenberry的Beta testing on iPhone 2.0文章。

越狱的iPhone

对于越狱的iPhone,您可以使用以下方法,我已经在iPhone OS 3.0上使用AccelerometerGraph示例应用程序进行了个人测试。

创建自签名证书

首先,您需要创建一个自签名证书并修补您的iPhone SDK以允许使用此证书:

  1. 启动Keychain Access.app。未选择任何项目,请从Keychain菜单中选择Certificate Assistant,然后Create a Certificate。

    Name: iPhone Developer
    Certificate Type: Code Signing
    Let me override defaults: Yes

  2. 点击Continue

    Validity: 3650 days

  3. 点击Continue

  4. 清空电子邮件地址字段。

  5. 一直点击Continue直到完成。

    您应该会看到"This root certificate is not trusted"。这是正常现象。

  6. 设置iPhone SDK以允许使用自签名证书:

    sudo /usr/bin/sed -i .bak 's/XCiPhoneOSCodeSignContext/XCCodeSignContext/' /Developer/Platforms/iPhoneOS.platform/Info.plist

    如果您已经打开Xcode,请重新启动它以使此更改生效。

通过WiFi手动部署

以下步骤需要先安装opensshuikittools。将jasoniphone.local替换为目标设备的主机名。在安装SSH后,请务必为mobileroot用户设置自己的密码。

要将应用程序手动编译并安装到手机上作为系统应用程序(绕过Apple的安装系统):

  1. Project, Set Active SDK, Device and Set Active Build Configuration, Release。

  2. 正常编译您的项目(使用Build而不是Build & Go)。

  3. build/Release-iphoneos目录中,您将拥有一个应用程序包。使用您喜欢的方法将其传输到设备上的/Applications目录下。

    scp -r AccelerometerGraph.app root@jasoniphone:/Applications/

  4. 让SpringBoard知道新应用程序已安装:

    ssh mobile@jasoniphone.local uicache

    这只需要在添加或删除应用程序时执行一次。更新的应用程序只需要重新启动即可。

为了使开发更加

ssh root@jasoniphone.local rm -r /Applications/AccelerometerGraph.app &&
ssh mobile@jasoniphone.local uicache

2
我的编译无法通过 - 当我尝试构建时,Xcode立即出现代码签名错误... - Devoted
1
如果你安装了uikittools包,那么uicache命令应该是存在的。 - Jason Weathered
我跟着你的步骤,但遇到了这个错误:https://dev59.com/HHI95IYBdhLWcg3wxA8- - hungbm06
有没有办法让它像普通应用程序一样可移动?顺便提一下,除了安装SSH之外,还有另一个选项,可以使用带有AppSync的常规USB构建:http://www.alexwhittemore.com/?p=398&cpage=4#comment-5313 - cregox
2
配置文件怎么样?有没有办法在不订阅开发者计划的情况下获得一个呢? - Teodor Kostov
显示剩余5条评论

18

是的,一旦您加入了iPhone开发者计划并向Apple支付了99美元,您就可以在最多100个iOS设备上提供您的应用程序。


2
为什么有100个安装限制? - Marcus Leon
25
人们不能使用这种方式完全绕过应用商店。 - willc2
2
而且100的限制是指你在iOS供应商门户网站上注册的设备数量,而不是你当前拥有的设备数量。因此,如果您添加了5个设备,然后将它们全部删除,您可以再添加95个设备(而不是100)。 - Scott C Wilson
1
但是,一旦您续订开发者计划,使用的设备数量将重置。 - dgund
1
临时配置文件的有效期为3个月,因此即使您已经注册了有限(100)台设备,也无法永久分发应用程序。 - Bogatyr

13
  • 构建你的应用程序
  • 上传到破解网站
  • (如果你的应用程序足够好) 破解版本将在几分钟后发布,准备供所有人下载 ;-)

8
借助这篇文章的帮助,我编写了一个脚本,可以通过应用程序Installous进行快速部署安装:
# compress application.
/bin/mkdir -p $CONFIGURATION_BUILD_DIR/Payload
/bin/cp -R $CONFIGURATION_BUILD_DIR/MyApp.app $CONFIGURATION_BUILD_DIR/Payload
/bin/cp iTunesCrap/logo_itunes.png $CONFIGURATION_BUILD_DIR/iTunesArtwork
/bin/cp iTunesCrap/iTunesMetadata.plist $CONFIGURATION_BUILD_DIR/iTunesMetadata.plist

cd $CONFIGURATION_BUILD_DIR

# zip up the HelloWorld directory

/usr/bin/zip -r MyApp.ipa Payload iTunesArtwork iTunesMetadata.plist

上面提到的帖子中缺少的是iTunesMetadata。没有它,Installous将无法正确安装应用程序。这是一个iTunesMetadata的示例:
<?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>appleId</key>
    <string></string>
    <key>artistId</key>
    <integer>0</integer>
    <key>artistName</key>
    <string>MYCOMPANY</string>
    <key>buy-only</key>
    <true/>
    <key>buyParams</key>
    <string></string>
    <key>copyright</key>
    <string></string>
    <key>drmVersionNumber</key>
    <integer>0</integer>
    <key>fileExtension</key>
    <string>.app</string>
    <key>genre</key>
    <string></string>
    <key>genreId</key>
    <integer>0</integer>
    <key>itemId</key>
    <integer>0</integer>
    <key>itemName</key>
    <string>MYAPP</string>
    <key>kind</key>
    <string>software</string>
    <key>playlistArtistName</key>
    <string>MYCOMPANY</string>
    <key>playlistName</key>
    <string>MYAPP</string>
    <key>price</key>
    <integer>0</integer>
    <key>priceDisplay</key>
    <string>nil</string>
    <key>rating</key>
    <dict>
        <key>content</key>
        <string></string>
        <key>label</key>
        <string>4+</string>
        <key>rank</key>
        <integer>100</integer>
        <key>system</key>
        <string>itunes-games</string>
    </dict>
    <key>releaseDate</key>
    <string>Sunday, December 12, 2010</string>
    <key>s</key>
    <integer>143441</integer>
    <key>softwareIcon57x57URL</key>
    <string></string>
    <key>softwareIconNeedsShine</key>
    <false/>
    <key>softwareSupportedDeviceIds</key>
    <array>
        <integer>1</integer>
    </array>
    <key>softwareVersionBundleId</key>
    <string>com.mycompany.myapp</string>
    <key>softwareVersionExternalIdentifier</key>
    <integer>0</integer>
    <key>softwareVersionExternalIdentifiers</key>
    <array>
        <integer>1466803</integer>
        <integer>1529132</integer>
        <integer>1602608</integer>
        <integer>1651681</integer>
        <integer>1750461</integer>
        <integer>1930253</integer>
        <integer>1961532</integer>
        <integer>1973932</integer>
        <integer>2026202</integer>
        <integer>2526384</integer>
        <integer>2641622</integer>
        <integer>2703653</integer>
    </array>
    <key>vendorId</key>
    <integer>0</integer>
    <key>versionRestrictions</key>
    <integer>0</integer>
</dict>
</plist>

显然,将所有MyApp的实例替换为您的应用程序名称,将所有MyCompany的实例替换为您的公司名称。
基本上,这将安装到任何已越狱并安装了Installous的设备上。设置完成后,这会导致非常快速的部署,因为它可以从任何地方安装,只需将其上传到您公司的网站,直接在设备上下载文件,并将其复制/移动到〜/文档/Installous / Downloads

@ToolmakerSteve 我不太确定,但是现在你可以使用任何Apple ID免费侧载iOS应用程序,所以我认为没有必要这样做。 - Richard J. Ross III

7
使用即将发布的Xcode 7,现在可以在没有苹果开发者许可证的情况下在设备上安装应用程序,因此现在可以跳过应用商店,无需越狱设备。
引用自:https://developer.apple.com/xcode/ 更新:
现在已经发布了XCode 7:
免费设备上开发
现在每个人都可以免费在设备上运行和测试自己的应用程序。 您可以在Mac、iPhone、iPad、iPod touch或Apple Watch上运行和调试自己的创作,无需任何费用,也没有加入任何程序的要求。 只需使用您的免费Apple ID登录Xcode即可。 您甚至可以使用与App Store或iTunes相同的Apple ID。 一旦您完善了您的应用程序,Apple开发者计划可以帮助您将其放在应用商店上。
有关在设备上安装和运行的详细信息,请参见在设备上启动应用程序

4
值得注意的是,如果你选择越狱方式,很可能会因为iPhone系统更新而失去运行这些应用程序的能力。我建议你选择官方途径并支付99美元进行授权。除了不必担心应用程序被破坏外,你还有机会(如果你选择)在商店发布你的应用程序。

2

按照@Jason Weathered所描述的方式将应用程序复制到iPhone后,确保对该应用程序进行“chmod +x”操作,否则它将无法运行。


1
如果您修补了/Developer/Platforms/iPhoneOS.platform/Info.plist,然后尝试使用来自苹果的真实开发配置文件在设备上调试应用程序,那么它可能无法正常工作。症状是来自com.apple.debugserver的奇怪错误消息以及在Xcode中构建时可以使用任何捆绑标识符而不会出现错误。解决方案是恢复Info.plist

1

*更改/注释以使其适用于Xcode 3.2.1iPhone SDK 3.1.2

通过WiFi手动部署

2) 修改Info.plist后,请务必重新启动Xcode

3) "uicache"命令未找到,使用killall -HUP SpringBoard对我来说效果很好。

除此之外,我可以确认这个方法很好用。

Mac用户,使用PwnageTool 3.1.4进行越狱(通过种子下载)效果很好。


啊,谢谢Jason,感谢这篇文档详细的帖子!也许应该提一下为像我这样的越狱新手安装Cydia的UIKit工具包。 - Rev316

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