`
sking777
  • 浏览: 23866 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
参考自:http://zhuoqiang.me/jailbroken-ios-device-debug-using-xcode.html

开发 iOS 程序时,如果要在真机上调试,开发者向苹果交 99 美金的年费来取得 iOS 开发者账号。钱虽不多,但有些开发者只想练练手玩一玩 iOS 开发,并不在意能否在 AppStore 上发布应用。对这些票友来说,这笔投资就有点纠结了。

开发 iOS 越狱程序可以绕过这个限制,直接在真机上调试。但是要使用命令行界面。如果可以利用 Xcode 集成开发环境提供的便利性直接在真机上调试,那对开发效率的提升是巨大的。

下面就介绍在不申请 iOS 开发者账号的情况下,如何使用 Xcode 在越狱的 iOS 设备上进行开发调试。

iOS 设备的设置

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

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

生成私有签名

你需要一个数字签名来签发 (codesign) App,这样 App 才能在 iOS 上运行。既然不想花 99 美金申请苹果官方的开发者签名,那就生成自己的私有签名。

苹果官方文档有详细的 生成步骤 :

打开 Mac OS X 操作系统自带的 实用工具 中的 钥匙串访问 程序
在 钥匙串访问 程序的菜单中选择 证书助理 -> 创建证书
证书的名称一定要写 iPhone Developer,以避免不必要的麻烦
身份类型为 自签名根证书,证书类型选 代码签名
勾选 让我覆盖这些默认值 并继续
随便输入一个的序列号。只要保证序列号和证书名称唯一就可以了
输入证书信息,因为是私有证书,随便写一下就行
后面选择框都用默认值就好了
完成后就可以在 钥匙串访问 中看到这个刚创建的 iPhone Developer 根证书了。它被标红警示 此证书不被信任,表示它不是由权威机构认证生成。没关系,我们在上一步已经搞定了 iOS 设备,不再需要权威机构了。

这个步骤只需一次。

设置 Xcode

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

告诉 Xcode 不需要签名
因为需要更改 Xcode 的配置文件,我们首先要关闭 Xcode。为了安全起见,在修改配置文件之前请备份原始文件。

以下的设置是以 Xcode 4.3 和 iOS SDK 5.0 为例。其它版本的路径略有不同,请自行修改。

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 版本都要做一遍。

告诉 Xcode 不用做签发动作
打开任意的 Xcode 工程,选择项目文件,在 Build Settings 中找到 Code Signing 项,选出 Code Signing Identity 的子条目 Any iOS SDK,将它设置为 Don't Code Sign。

指示 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 框中输入下面的脚本:

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
开始调试

打开设置好的 Xcode 工程,连上 iOS 设备。打开 Xcode 的 Organizer 面版,在左边的 Device 列表中选中连接上的 iOS 设备,点击 Use for Development,对弹出的对话框都选择 拒绝 或 Cancel。

现在点击 Run 按钮,看看你的设备,见证奇迹的时刻到了。

你也可以切换到 Debug 版本进行调试: 选择菜单 Product -> Edit Scheme … 将 Run YourAppName.app 中的 Build Configuration 改为 Debug。

至此,你就可以免掉 99 美金的年费尽情的在真机上调试应用了。

补充

本文的方案严重参考 http://www.alexwhittemore.com/developing-jailbroken-iphone-ios-401/ 向原作者致谢
该方案经验证能在 Xcode 3 ~ 4, iOS 4 ~ 5 版本上运行。不同版本的配置文件路径有所不同,请自行修改
要在 AppStore 上发布你的应用,99 美金的年费是无论如何省不下来的。其实价格倒也公道,毕竟 Xcode 是免费的
如要正常的签发流程,请恢复备份的原始配置文件。我还没有恢复过,不保证一定能恢复成功
分享到:
评论

相关推荐

    Xcode添加iOS10.0真机调试支持包

    需要注意的是,真机调试要求你的设备已越狱或者与你的电脑通过USB连接,并且在设备上信任了你的电脑。此外,Xcode和你的设备的开发者设置必须配置正确,包括开启USB调试、设置正确的证书和 provisioning profile 等...

    iOS 真机调试包,有需要的自行下载,12.0 - 16.4

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统版本上运行无误。标题提到的“iOS 真机调试包”是一个专门为iOS开发者提供的工具集合,用于...

    ios12.2真机调试包

    1. **安装开发者证书**:在Xcode中,开发者需要注册并下载相应的iOS开发者证书,这样可以将应用安装到非越狱的iOS设备上。 2. **连接设备**:使用USB线将iOS设备连接到开发用的Mac电脑。 3. **开启设备的USB调试**:...

    xcode免证书开发调试文档

    在开发环境搭建完成后,需要进行测试以验证整个环境是否搭建成功。测试通常包括编译和运行简单的程序,如IPAD的helloword程序,以及确保编译无误后,程序能够成功编译并传送到iPad中。 知识点八:文档中提到的某些...

    ios Xcode真机调试支持9.2

    总之,"ios Xcode真机调试支持9.2"意味着开发者可以使用现有Xcode版本在iOS 9.2设备上进行调试,而无需升级到最新版本的Xcode。这为维持老版本系统兼容性和项目回溯提供了便利。通过正确配置和导入所需的文件,...

    xcode iOS13.1真机调试 diskimage

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统版本下都能正常运行。本文将深入探讨使用Xcode进行iOS13.1真机调试时涉及的关键知识点,...

    iOS 越狱逆向12.4-12.5.5 lldb动态调试包

    lldb是Apple开发的一个强大的源代码级调试器,它支持多种编程语言,包括Objective-C、Swift和C++,在iOS越狱环境中是进行逆向工程的重要工具。 首先,iOS 12.4到12.5.5是这个调试包支持的版本范围。在这些版本的iOS...

    iOS 12 Xcode真机支持文件

    在iOS开发过程中,真机设备的支持文件是必不可少的,它们使得开发者能够在真实设备上测试应用程序,确保其在不同iOS版本上的兼容性和性能表现。本文主要围绕"iOS 12 Xcode真机支持文件"这一主题,详细阐述相关知识点...

    ios12真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,确保软件在不同硬件和系统版本上的兼容性和性能。"ios12真机调试包"正是针对这一需求提供的一个资源,它包含了Xcode进行ios...

    Xcode IOS12.3真机调试包

    3. 真机调试:在开发过程中,为了确保应用在实际设备上的表现,开发者需要在真实iPhone或iPad上进行测试。这被称为真机调试,与模拟器调试不同,真机调试能更好地模拟用户的真实使用环境,包括性能、电池消耗和网络...

    iOS16.0真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统版本上运行无误。本文将深入探讨“iOS16.0真机调试包”及其相关知识点。 首先,我们要明白...

    iOS11.3 Xcode真机支持文件

    当更新到新的iOS版本,如iOS 11.3时,开发者需要确保Xcode支持该新版本,以便在真机设备上进行有效的测试和开发。"iOS 11.3 Xcode真机支持文件"就是为这种目的而提供的,它包含了运行iOS 11.3版本的设备所需的特定...

    ios 14.7 真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统环境下都能正常运行。"iOS 14.7 真机调试包" 提供了这样的环境,使得开发者能够在最新的iOS...

    ios 短信接收,越狱

    使用Xcode或其他工具连接到越狱设备,进行实时调试和测试。 5. **安全与隐私**:务必注意,访问用户的短信数据涉及敏感的隐私信息,因此在开发过程中应遵循最佳实践,确保数据的安全处理。 总结来说,通过越狱,...

    ios14.5真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保其在各种硬件配置和系统版本上的表现。这里提到的"ios14.5真机调试包"是一个专为iOS 14.5版本设计的调试工具,帮助...

    14.0真机调试包 安装路径:/应用程序/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/De

    在iOS开发过程中,真机调试是不可或缺的环节,它允许开发者在实际的iPhone或iPad设备上运行和测试应用程序,以确保其在不同设备上的兼容性和性能。 Xcode的安装路径在描述中给出,位于"/应用程序/Xcode.app/...

    ios14.0真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统环境下都能正常运行。本文将深入探讨与"ios14.0真机调试包"相关的知识,包括iOS 14.0的主要...

    MAC OS X 10.8 + Xcode 4.6 下实现无证书真机调试 IOS5.1.1

    完成以上步骤后,你应该能够在没有官方开发者证书的情况下,在越狱的iOS 5.1.1设备上进行真机调试。请注意,这种方法仅适用于测试和学习目的,不适用于发布到App Store。在实际开发过程中,苹果强烈要求使用官方的...

    iOS14.6真机调试包 14.6.zip

    本文将深入探讨iOS14.6真机调试包以及其在开发过程中的作用。 首先,我们需要理解什么是“真机调试”。真机调试与模拟器调试相对,模拟器调试是在苹果提供的iOS模拟器上进行,而真机调试则是直接在iPhone、iPad等...

Global site tag (gtag.js) - Google Analytics