【问题标题】:How can I deploy an iPhone application from Xcode to a real iPhone device?如何将 iPhone 应用程序从 Xcode 部署到真正的 iPhone 设备?
【发布时间】:2010-09-19 18:32:40
【问题描述】:

如何在没有 99 美元的 Apple 证书的情况下将 iPhone 应用程序从 Xcode 部署到真实的 iPhone 设备?

【问题讨论】:

标签: ios xcode deployment certificate


【解决方案1】:

我混合使用了两种方法:Jason'salex's。有了第二个,我们就有了能够调试的优势。我将主要复制以下两者(并简化亚历克斯):

2012 年 1 月更新:这仍然适用于 SDK 4.2.1 和 iOS 5.0.1 - 我刚刚在一台新计算机上进行了测试,并且设备!


1。创建自签名证书

修补您的 iPhone SDK 以允许使用此证书:

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

    • 姓名: iPhone 开发人员
    • 证书类型: 代码签名
    • 让我覆盖默认值:
  2. 点击继续

    • 有效期: 3650 天
  3. 点击继续

  4. 删除电子邮件地址字段。

  5. 点击继续直到完成

    您应该看到“此根证书不受信任”。这是意料之中的。

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

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

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

如果您使用的是 iOS 5,就是这样!现在就试试!它可能不允许调试,但应用程序会在那里!

我对此感到非常惊讶,因为作为you should know,我不知道所有这些黑客行为的全部内容!正如我所指出的,我所做的只是稍微改进我在其他地方发现的东西。

所以,是的,整个方法不再以同样的方式工作,我也懒得找一个新的...除了this, which uses a tool called Theos 但是我无法完成整个过程。

最后,如果您出于某种原因需要卸载它,请查看本文末尾。就我而言,我不得不这样做,因为我无法弄清楚为什么整个方法都停止工作了,而且我已经不在乎了,因为我们已经获得了等待已久的许可证。 (该死的 DUNS 号码需要这么长时间......)

.

.


.

.

.

2。使 Xcode 能够在越狱设备上构建

  1. 在您越狱的 iPhone 上,通过添加源 ** http://repo.hackyouriphone.org**

  2. 来安装应用程序 AppSync
  3. 删除代码签名和权利的 SDK 要求(我喜欢 sed!):

    sudo /usr/bin/sed -i .bak '/_REQUIRED/N;s/YES/NO/' /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist
    
  4. 注意iPhoneOS5.0.sdk 部分。例如,如果您使用的是 iOS 4.2 SDK,只需相应地替换它:

    sudo /usr/bin/sed -i .bak '/_REQUIRED/N;s/YES/NO/' /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist
    
  5. 通过修补 Xcode 结束需求删除。这意味着二进制编辑:

    cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
    dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
    printf "\xc3\x26\x00\x00" >> working
    /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
    /bin/mv working iPhoneOS\ Build\ System\ Support
    chmod a+x iPhoneOS\ Build\ System\ Support
    

    如果您打开了 Xcode,请重新启动它以使此更改(和最后一个)生效。

  6. 打开“项目>编辑项目设置”(从菜单中)。单击“构建” 选项卡。 在列表中找到 "Code Signing Identity" 及其子 "Any iPhoneOS Device",并将两者都设置为条目 "Don't Code Sign "

    在此之后,请随意撤消第 3 步。至少在我的情况下,一切正常。

  7. 使用我们定制的自签名证书将 Xcode 设置为代码签名(第一个操作方法)。如果不想调试,这一步可以跳过:

    mkdir /Developer/iphoneentitlements401
    cd /Developer/iphoneentitlements401
    curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
    mv gen_entitlements.txt gen_entitlements.py
    chmod 777 gen_entitlements.py
    

    插入您的 iPhone 并打开 Xcode。打开窗口>组织者。从左侧列表中选择设备,然后单击“用于开发”。系统将提示您登录配置网站,单击取消。这样做是为了让合法的配置更容易,但不会让非法的不配置变得更加困难。

    现在你必须为你所做的每一个新项目做这最后一部分。转到菜单项目 > 新构建阶段 > 新运行脚本构建阶段。在窗口中,复制/粘贴:

    export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
    /Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
    codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
    fi
    

.

.


.

.

卸载

第一部分:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Info.plist.bak /Developer/Platforms/iPhoneOS.platform/Info.plist

第二部分:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist.bak /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist
sudo mv -f iPhoneOS\ Build\ System\ Support.original iPhoneOS\ Build\ System\ Support

如果您确实执行了第 3 步而不是第 2 步,也只需相应地进行修改:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist.bak /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist

剩下的,只是恢复你在 XCode 上所做的事情,如果你愿意,可以删除 /Developer/iphoneentitlements401/gen_entitlements.py

sudo rm -f /Developer/iphoneentitlements401/gen_entitlements.py

【讨论】:

  • 尝试按照这些说明进行操作,但现在“方案”的类型为 My Mac 64 位,我没有任何选项可以运行模拟器或真正的 iPhone,所以我什至无法测试代码。我使用的是 SDK 4.3,不确定是否重要
  • 实际上,更新:将项目设置中的基础 SDK 从 iphoneos 更改为 iOS 4.3 后,一切正常。虽然 xcode 说“启动远程程序时出错:无法获取进程的任务”,但我可以通过单击它来启动应用程序。
  • 我收到此错误:The identity used to sign the executable is no longer valid. ... (0xE8008018) 即使我设置了 3650 天到期。似乎手机本身正在检查。
  • 这个“修补 XCode”技巧是否适用于 4.3.2 或者它会刹车
  • 第 6 点。在我的情况下,我必须更改 /Developer/iphoneentitlements401/gen_entitlements.py 文件权限才能让普通用户执行它。有了这个程序完美运行。
【解决方案2】:

听起来应用程序未签名。从 Cydia 下载 ldid 然后像这样使用它:ldid -S /Applications/AccelerometerGraph.app/AccelerometerGraph

还要确保二进制文件被标记为可执行文件:chmod +x /Applications/AccelerometerGraph.app/AccelerometerGraph

【讨论】:

  • 是的,您需要越狱您的设备才能使用此方法。 (显然)
  • 如何启动命令 ldid -S ...?你需要一个 SSH 控制台吗?有没有免费的方法可以在越狱的 iPhone 上获取 SSH 客户端?
  • tanderson:Cydia 中有一个 ldid 包,你可以为 OS X 编译一个
  • rpetrich 我相信他的问题是如何键入和使用命令,而不是如何获取包。 @tanderson,您可以通过 Open SSH(然后从您的桌面连接到手机)或 iPhone 本身内部的 Terminal。这两个应用程序都可以从 Cydia 免费下载。使用 SSH,您还可以使用它来简单地将您的应用程序复制到手机上。如果您经常这样做,请务必检查其他答案 - 您可以让 XCode 为您完成所有工作,但欺骗它这样做是一个麻烦的过程。
【解决方案3】:

Xcode 7 之后的免费配置

为了在真实设备上测试您的应用而不是支付 Apple 开发人员费用(或越狱您的设备),您可以使用 Xcode 7 和 iOS 9 支持的新免费配置。

以下是或多或少从the documentation 采取的步骤(非常好,请阅读):

1.在 Xcode 中添加您的 Apple ID

转到 XCode > 首选项 > 帐户选项卡 > 添加按钮 (+) > 添加 Apple ID。如需更多帮助,请参阅the docs

2。单击项目导航器中的常规选项卡

3.从团队弹出菜单中选择您的 Apple ID。

4.连接您的设备并在方案菜单中选择它。

5.点击修复问题按钮

如果您收到有关捆绑名称无效的错误,请将其更改为唯一名称。

6.运行您的应用

在 Xcode 中,单击 Build and run 按钮。

7.在设备设置中信任应用开发者

运行您的应用后,您会收到一个安全错误,因为您要运行的应用不是来自 App Store。

在您的设备上,转到“设置”>“通用”>“个人资料”>your-Apple-ID-name > 信任your-Apple-ID-name em> > 信任。

8.再次在您的设备上运行您的应用。

就是这样。您现在可以运行自己的(或您拥有源代码的任何其他应用程序),而无需花费 99 美元。谢谢你,Apple,终于允许这样做了。

【讨论】:

  • 非常感谢。这在没有付费的 Apple 开发者许可的情况下完美运行。
  • 这确实有一些问题——您一次最多只能安装 3 个应用程序,并且您需要每周更新证书。
  • @seaturtle,感谢您的更新。我最终为开发者许可证付了钱,所以我没有及时了解这个答案。这对限制来说太糟糕了。 Android 在某些方面比 Apple 好得多。
  • 在我运行 iOS 15 的 iPhone 上,第 7 步的设置位于“设置”>“常规”>“VPN 和设备管理”下
【解决方案4】:

如果您谈论的是使用官方 SDK 构建并直接从 xcode 部署的应用程序,则不能。

【讨论】:

    【解决方案5】:

    您必须越狱您的设备。

    【讨论】:

    • 按照@rpetrich 的方法并将可执行文件通过SSH 连接到设备的/Applications 文件夹中,它应该在重新启动/重新启动后工作。
    【解决方案6】:

    有一种无需支付苹果费用即可部署 iPhone 应用程序的方法 您必须越狱您的设备并按照http://www.alexwhittemore.com/?p=398中的说明进行操作

    【讨论】:

    • 也是一个完美的指南,采用与@Dan 不同的方法......我两者都用过。
    【解决方案7】:

    我在任何地方都没有看到表明您可以在没有(付费)证书的情况下临时部署到真正的 iPhone。

    【讨论】:

      【解决方案8】:

      我昨晚浏览了 Apple Developer,在配置证书中我发现了类似“签名团队成员”的内容。我认为有一种方法可以将团队成员添加到付费个人资料中。 您可以要求 App Id Owner(付费)将您添加为团队成员。我不知道。仍在寻找。

      【讨论】:

      • 是的,您可以添加团队成员。每年的设备数量限制为 200 台。
      • Cawas - 你知道如何将成员添加到你的 Apple ID 吗?
      • 只有在您在名称前添加 @ 时,我们才会收到通知。正如您自己所说,您必须首先获得一个付款帐户。那么它应该非常简单,因为我找不到任何关于如何做到这一点的教程。我自己从来没有这样做过。
      【解决方案9】:

      不,这很容易做到。在 Xcode 中,将 Active Configuration 设置为 Release。将设备从模拟器更改为设备 - 任何 SDK。如果要直接导出到 iPhone,请将其连接到计算机。按构建并开始。如果您的 iPhone 未连接到计算机,则会出现一条消息,提示您的 iPhone 未连接。

      如果这适用于您:(未连接 iPhone)

      转到您的项目文件夹,然后转到其中的构建文件夹。转到 Release-iphoneos 文件夹,将应用程序放入其中,拖放到 iTunes 图标上。当您同步您的 iTouch 设备时,它会将其复制到您的设备。它也将作为 iPhone 应用程序出现在 iTunes 中。

      希望这会有所帮助!

      PS:如果它说证书无效,只需单击 Xcode 中的项目,左侧​​文件堆栈中的小项目图标,然后按 Apple+I,或从菜单栏中执行 Get Info .单击顶部的构建。在 Code Signing 下,更改 Code Signing Identity - Any iPhone OS Device to be Don't Sign。

      【讨论】:

      • OP 没有签名证书或配置文件。这些说明适用于 99 美元的 iPhone 开发者计划的成员,但并未解决如何在未注册该计划的情况下在设备上运行的问题。
      【解决方案10】:

      这实际上完全取决于您使用的 Xcode 版本,因为不同的版本使用不同的方法部署到您的 iPhone,而无需配置文件。

      Xcode 3.2.1 是一个不错的版本,很容易整理,但是我们需要知道你使用的是什么版本。

      【讨论】:

        【解决方案11】:

        Cawas 发布的解决方案也与 XCode4 完美配合。但是,IDE 的 UI 有一些变化,所以你需要做一些研究才能找到 Run Script :)

        在 Project Navigator 视图中单击项目的根项,然后在中间窗口中选择 Target,然后单击 Build Phases 选项卡,在底部您将看到 Add Build Phase 按钮​​,单击并选择 Add Run Script,然后粘贴 Cawas 发布的“代码设计”脚本。

        【讨论】:

          【解决方案12】:

          没有解决方法。如果应用程序已在您的设备上注册,您只能临时部署应用程序。这会阻止您建立自己的应用商店..

          【讨论】:

            猜你喜欢
            • 2011-07-02
            • 1970-01-01
            • 2011-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多