使用 Xcode 在越狱 iOS 设备上进行开发调试


1 目的

开发 iOS 程序时,如果想要在真机上进行调试,开发者必须要付 99 美金的年费用来获取苹果公司的 iOS 开发者账号。99 美金并不算贵,但对于只想练练手玩一玩 iOS 开发而不想在 AppStore 上发布应用的程序员来说,这笔投资让人有点纠结。
另一方面,iOS 越狱程序的开发调试通常使用命令行的 SDK 进行,如果可以利用 Xcode 集成开发环境提供的便利性在真机上调试,那对开发效率的提升是巨大的。
下面就将介绍在不申请 iOS 开发者账号的情况下,如何使用 Xcode 在越狱的 iOS 设备上进行开发调试。

2 iOS 设备的设置

iOS 设备在安装运行每一个 App 时都需要检查其数字签名。为安全起见,苹果公司只允许由苹果官方授权的数字签名签过的 App 在真机上运行。让我们先绕过这个限制:

  1. 越狱你的 iOS 设备。请自行放狗查找越狱教程
  2. 安装越狱应用 AppSync。这需要在 Cydia 中添加源 http://cydia.hackulo.us , 然后选择一个适合设备的 AppSync 版本下载安装。这个应用能让设备绕过苹果的数字签名验证机制,从而安装我们私有签名签发的 App (当然,也能安装盗版 App,这不在讨论范围之内,请支持正版!)
  3. 重启 iOS 设备

每次 iOS 操作系统升级都要在设备上重复该步骤。

3 生成私有签名

你需要签名来签发 (codesign) App,这样才能在 iOS 设备上运行。既然不想花 99 美金申请苹果官方的开发者签名,那就生成自己的私有签名来签发。
苹果官方文档有详细的生成步骤https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html:

  1. 打开 Mac OS X 操作系统自带的 实用工具 中的 钥匙串访问 程序
  2. 在钥匙串访问程序的菜单中选择 证书助理 -> 创建证书 …
  3. 证书的名称一定要写 “iPhone Developer”,以避免不必要的麻烦
  4. 身份类型为 自签名根证书 ,证书类型选 代码签名
  5. 勾选 让我覆盖这些默认值 并继续
  6. 随便输入一个的序列号。保证序列号和证书名称唯一就可以了
  7. 输入证书信息,因为是私有证书,随便写一下就行
  8. 后面选择框都用默认值就好了

完成后你就可以在钥匙串访问中看到这个新创建的名为 “iPhone Developer” 的自行签名的根证书了。它被标红警示 “此证书不被信任”,表示其并非权威机构认证生成的。这没有关系,因为我们在上一步已经搞定了 iOS 设备了。

该步骤只需一次。

4 设置 Xcode

我们需要告诉 Xcode 在编译调试时既不需要签名,也不用做自动的签发动作。最后,还要指定 Xcode 使用上一步骤中生成的私有签名来签发 (codesign) 我们的程序。

4.1 告诉 Xcode 不需要签名

因为需要更改 Xcode 的配置文件,我们首先要关闭 Xcode,同时为了安全起见,在修改配置文件之前都要备份原始文件。
以下的设置是以 Xcode 4.3 和 iOS SDK 5.0 为例。其它的版本的 Xcode 和 iOS SDK 的路径略有不同,请自行对应修改。

cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/
sudo cp Info.plist Info.plist.orig
sudo vi Info.plist

找到

<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>

将 YES 改为 NO。
再找

<key>ENTITLEMENTS_REQUIRED</key>
<string>YES</string>

也将 YES 改为 NO

然后用同样方法,先备份 /Developer/Platforms/iPhoneOS.platform/Info.plist 配置文件,然后修改其中所有的

<key>CODE_SIGN_CONTEXT_CLASS</key>
<string>XCiPhoneOSCodeSignContext</string>

替换其中的 XCiPhoneOSCodeSignContext 为 XCCodeSignContext

最后,我们要修改 Xcode 中的 iPhone 开发的 plugin

cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/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
mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

这样,Xcode 就知道 iOS 的程序不需要签名了。该步骤对每个新安装的 Xcode 和 iOS SDK 版本都要做一遍。

4.2 告诉 Xcode 不用做签发动作

打开任意的 Xcode 工程,选择项目文件,在 Build Settings 中找到 Code Signing 项,选出 “Code Signing Identity” 中的子条目 “Any iOS SDK”,将它设置为 “Don’t Code Sign”。

4.3 指示 Xcode 使用私有签名签发 App

新建并保存下面的 python 脚本:

#!/usr/bin/env python
 
import sys
import struct
 
if len(sys.argv) != 3:
    print "Usage: %s appname dest_file.xcent" % sys.argv[0]
    sys.exit(-1)
 
APPNAME = sys.argv[1]
DEST = sys.argv[2]
 
if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
    print "Dest must be .xml (for ldid) or .xcent (for codesign)"
    sys.exit(-1)
 
entitlements = """
<?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>application-identifier</key>
    <string>%s</string>
    <key>get-task-allow</key>
    <true/>
</dict>
</plist>
""" % APPNAME
 
f = open(DEST,'w')
if DEST.endswith('.xcent'):
    f.write("\xfa\xde\x71\x71")
    f.write(struct.pack('>L', len(entitlements) + 8))
f.write(entitlements)
f.close()

假定脚本保存在 /Developer/iphoneentitlements401/gen_entitlements.py,将其设为可执行

chmod 777 /Developer/iphoneentitlements401/gen_entitlements.py

最后,你必需在每一个需要实体设备调试的工程中指定运行该脚本。选中工程文件,在 Build Phases 页中点击右下角的 Add Build Phase 按钮。在 Shell 框中输入下面的 shell 脚本:

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

5 开始调试

打开设置好的 Xcode 工程,连上 iOS 设备。打开 Xcode 的 Organizer 面版,在左边的 Device 列表中选中连接上的 iOS 设备,点击 Use for Development,对弹出的对话框都选择 “拒绝” 或 “Cancel”。
现在点击 Run 按钮,你就能在设备上运行你的程序了。
如果需要调试,你也可以切换到 Debug 版本: 选择菜单 Product -> Edit Scheme … 将 Run YourAppName.app 中的 Build Configuration 改为 “Debug”。
至此,你就可以免掉99美金的年费尽情的在真机上调试你的应用了。

6 补充

  • 本文的方案严重参考 http://www.alexwhittemore.com/developing-jailbroken-iphone-ios-401/ 向原作者致谢。
  • 该方案经验证能在 Xcode 3 ~ 4, iOS 4 ~ 5 的版本上运行。不同版本的配置文件路径有所不同,请自行修改。
  • 要在 AppStore 上发布你的应用,99 美金的注册年费是无论如何省不下来的。其实价格倒也公道,毕竟 Xcode 是免费的。
  • 如要正常的签发流程,请用每一步骤中备份的原始配置文件进行恢复。警告! 本人还没有恢复过,不能保证一定能成 :P
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xcode是苹果公司推出的一款集成开发环境(IDE),专门用于开发苹果的操作系统iOS、macOS、watchOS和tvOS应用程序。 iOS 17.0是苹果公司最新推出的移动操作系统版本。在开发iOS应用程序时,开发人员通常会使用Xcode进行调试和测试。为了在真机上进行调试和测试,我们需要准备一个iOS 17.0真机调试包。 首先,我们需要确保Xcode已经升级到最新版本,以便支持最新的iOS 17.0操作系统。然后,我们需要通过Apple开发者中心下载相应的iOS 17.0真机调试包。在Apple开发者中心的下载页面中,我们可以找到相关的资源并按照提示进行下载和安装。 安装完成后,我们需要将真机连接到电脑上。通过使用USB线连接真机和电脑,我们可以在Xcode中选择真机进行调试和测试。在Xcode设备列表中,我们可以看到已连接的真机,并选择相应的设备进行调试。 在进行真机调试之前,我们需要确保我们的应用程序已经签名和配置正确,以便在真机上运行。我们可以使用Xcode的代码签名工具和配置文件,为应用程序获取必要的签名和配置。 一旦完成了以上步骤,我们就可以使用Xcode进行iOS 17.0真机调试了。我们可以在Xcode中设置断点、监视变量和执行调试操作,以便发现和修复应用程序的问题。 总之,Xcode开发iOS应用程序的首选工具之一,而iOS 17.0真机调试包是我们在Xcode进行真机调试和测试时所需的资源。通过正确的设置和配置,我们可以在真机上进行调试并改进我们的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值