`

Xcode 4.1/4.2 免证书真机调试

    博客分类:
  • IOS
 
阅读更多

本文首次发表于http://kqwd.blog.163.com/
参考的文章有:
http://laolang.cn/back-end-develop/helloworld-iphone-developer.html
http://ccmos.tw/blog/2011/06/30/xcode4-port-program-to-idevice-without-idp/
http://www.cnblogs.com/flyingzl/articles/2207717.html

众所周知,在Xcode上开发的程序只能在模拟器中运行,如果要放到真机上则要花费99美金购买开发者证书iDP。这严重阻碍了我等草根开发者探索的脚步。写个小程序,同学间分享一下这个小小的愿望都不能满足,自然不能善罢甘休。
在没有iDP的情况下,要想将程序放到iPhone上调试,并最终发布IPA用于分享,需要以下几个步骤:
1.自己为自己颁发一个证书用于为生成的程序签名
2.修改工程配置以及Xcode的配置文件和二进制文件以阻止其验证和签名
3.通过自定义生成步骤,用伪造的证书为应用程序签名
4.使用一点小trick来生成IPA文件

开始之前的友情提示:
1. 本文给有一定基础的朋友看,各种命令是免不了的。UNIX中的基本命令比如cp,mv,cd,chmod,sudo啥的还有vim编辑器,如果您都没听说过,强烈建议您不要尝试本文提到的修改。一旦改错了轻则Xcode挂掉,重则系统崩溃。
2. 本文的每一个步骤都是必须的,如果您哪一步没有得到预期的结果,请不要继续,以免发生更加意外的事情。。。
3. 如果遇到解决不了的问题欢迎留言询问,务必给出详细的错误信息,否则无法判断。

1.创建证书
创建证书的过程比较简单,打开实用工具-钥匙串访问。然后在菜单栏里点击钥匙串访问-证书助理-创建证书来打开向导。第一个步骤比较重要,必须要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。之后的步骤无需更改,一路点击“确定”和“继续”来完成这个向导就可以。


2.修改Xcode的配置文件和二进制文件
下面的步骤稍微有点繁琐,您应该了解UNIX命令行的基本操作,并了解一种命令行文本编辑器,本文使用的是vim。尽管这里会给出完整的代码,但是关于修改和保存代码的基本操作,不再赘述。下面的操作请先将Xcode按Command+Q完全关闭
(1)修改配置文件
进入目录并备份原文件(4.1和4.2在这里主要的差别是SDK的目录名不同)
(Xcode4.1请执行)cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/
(Xcode4.2请执行)cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/
sudo cp SDKSettings.plist SDKSettings.plist.orig
进行编辑
sudo vim SDKSettings.plist
将以下两段中的YES改为NO
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>
<key>ENTITLEMENTS_REQUIRED</key>
<string>YES</string>

下面修改另外一个文件
进入目录并备份原文件
cd /Developer/Platforms/iPhoneOS.platform/
sudo cp Info.plist Info.plist.orig
进行编辑
sudo vi Info.plist
将全部的XCiPhoneOSCodeSignContext 修改成 XCCodeSignContext,网上的大部分文章说有2处,但我找到了3处,可能是Xcode 4.1要多一处?(Xcode 4.2也有三处)总之都改掉了。提示:在在vim中输入/要搜索的内容来搜索,按n键是搜索下一处。

(2)二进制补丁
#在桌面上建立script这个脚本
cd ~/Desktop
vim script
#(Xcode 4.1执行)在编辑器中输入如下内容
#!/bin/bash
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 "xc3x26x00x00" >> 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 4.2执行)在编辑器中输入如下内容
#!/bin/bash
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 "xc3x26x00x00" >> 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
保存并退出。(4.1和4.2在这里的区别也是目录名不同,就是代码中绿色的部分。4.1是Plug-ins而4.2是PrivatePlugIns
授予这个脚本执行权限并执行它
chmod 777 script
./script
正常的话应该输出(具体的数字可能有差别)
231+1 records in
231+1 records out
115904 bytes transferred in 0.001738 secs (66694555 bytes/sec)
至此,对SDK中配置文件和二进制文件的修改就完成了

3.准备自定义的生成后脚本
连接互联网后执行
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
如果您已经联网,则请直接转到步骤4,如果您没有联网,那么请手动创建/Developer/iphoneentitlements401/gen_entitlements.py并授予其执行权限,这个文件的内容为
#!/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()

4.修改工程设置
特别注意:本阶段之前的修改配置文件、准备脚本等,只需要做一次。但本阶段的操作,对每个需要真机调试的工程都要做一遍。
这个步骤的主要作用是支持真机调试,如果不做这个步骤,仍然可以通过步骤5来生成ipa在真机上运行,但是无法使用Xcode内置的调试器对在真机上运行的程序进行单步跟踪。如果您的程序在点击Run真机调试时秒退,请检查此步骤是否正确完成。
 (1)禁用Xcode自动的签名操作
将工程配置中所有的Code Signing选项全部设为Don't Code Sign,如图。可能需要先点击“All”让这个选项显示出来

 
(2)添加自定义的生成后脚本
在Build Phases中添加一个Phase,右下角的Add Build Phase,然后单击Add Run Script,输入以下脚本
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 4.1免证书(iDP)开发+真机调试+生成IPA全攻略 - 月下独酌 - 锦瑟华年
 
至此配置全部完成,下面就可以插上iPhone,重新选择生成目标来测试一下在线调试了!

5.旁门左道生成IPA文件
如果我的程序调试好了,怎么才能发给别人用呢?正常情况下IPA文件是从Xcode的Organizer中输出的,但是我们没有证书,这样输出会产生错误。我们只能用个小trick来完成这个操作了。
先将代码生成为Release目标,然后打开工程的输出文件夹,通常情况下这个目录是
/Users/你都用户名/Library/Developer/Xcode/DerivedData/以工程名打头的文件夹/Build/Products/Release-iphoneos
很纠结吧~这个目录下有个.app的文件,就是生成的程序了。把这个.app拖到iTunes中,它会出现在应用程序那个列表中,然后再把它从iTunes的那个列表中拖出来(比如拖到桌面),发生了什么?哈哈,它就这样变成.ipa了!
把这个.ipa发给朋友,大家就可以跟您一起分享这个程序了。

文章发表以来点击量已经超过了5000次,也收到了不少热心博友的反馈和疑问。现加以整理,列为常见问题。感谢大家的关注!(2011年12月2日)
常见问题:
1. 程序运行时报错,或者根本不能通过编译。错误信息类似(感谢博友rinzeng提出)
ARC forbids explicit messsage send of 'release'
'release' is unavailable: not available in automatic reference counting mode
解答:这个错误与本文讨论的问题无关,即使在模拟器上运行也照样会报错。但我愿意在这里予以解答。这个错误是由在iOS 5中最新引进的ARC内存管理机制造成的。解决方法有2种,一是不要加release语句。二是在Build Settings中关闭Objective-C Automatic Reference Counting

2. 各种错误,错误信息中包含“No such file or directory”这句话
解答:错误信息的含义非常清楚,就是“没有这个文件或者目录”。这类错误通常是由于您拷贝代码时不全或者开发环境安装错误等问题导致的。请再次检查报错的目录是否存在,检查代码与本文给出的是否严格一致,各种检查吧~总之是低级错误

3. 联机调试时程序秒退,或者任何时候报错,错误信息中包含“code sign”、“CERT”或者“certificate”字样的
解答:证书错误或者签名错误,这种问题就不要问了,肯定是因为您没有严格文中的步骤做。提醒您检查的地方有(1)有没有设置为Don't Code signing (2)生成后事件的代码是否已经正确粘贴 (3)那个Python脚本是否已经成功执行

4. iPad能用吗?
解答:我没有iPad,所以没法准确回答。但从热心博友的回复来看,iPad无疑是可以用的。
如果要用ipad 需要把第四步脚本文件里的 platform_name == iphones 换成platform_name == ipads 不然会报错的~ (感谢博友xyishao的建议)

5. 为什么我的Build for Archiving选项是灰色的?
解答:是因为您没有把设备插到电脑上。虽然这个问题挺蠢的,但我曾经也有过这个疑问,哈哈~~

分享到:
评论

相关推荐

    Xcode 4.1_4.2 免证书(iDP)开发+真机调试+生成IPA全攻略.pdf

    在本文中,我们将详细介绍 Xcode 4.1/4.2 免证书(iDP)开发+真机调试+生成 IPA 的全攻略。我们将分步骤地介绍如何自己颁发证书、修改 Xcode 的配置文件和二进制文件、使用自定义的步骤为应用程序签名和生成 IPA ...

    xcode4.1/4.2/4.3/4.4真机调试手把手教程

    亲测,MAC 10.7 下xcode 4.3完美破解,可真机调试, MAC 10.8 下 xcode4.4 完美破解,可真机调试

    Xcode 4.2 4.1 免证书开发

    因此,本篇文章将详细介绍如何在不购买苹果开发者证书的情况下,在Xcode 4.1/4.2/4.2.1版本中进行免证书开发、真机调试以及生成IPA文件。 #### 二、准备工作 为了实现免证书开发,我们需要进行以下准备: 1. **...

    XCode 4.2(4.1)真机调试及生成IPA全攻略

    通过上述步骤,即使没有正式的开发者证书,也可以在Xcode 4.2 (4.1)中进行真机调试,并最终生成可分享的IPA文件。需要注意的是,这种做法存在一定的法律风险,仅适用于学习和个人研究目的。随着Xcode版本的不断更新...

    Xcode生成IPA全攻略

    Xcode 4.1/4.2/4.3/4.4/4.5 + iOS 5.1.1免证书(iDP)开发+真机调试+生成IPA全攻略

    iOS 5.1.1免证书开发+真机调试+生成IPA全攻略

    iOS开发中的免证书开发与真机调试是许多iOS开发者的迫切需求,尤其是对于个人开发者或小团队来说,购买开发者计划证书的99美元年费是一笔不小的开支。在iOS 5.1.1时代,绕过证书限制进行开发和调试的教程在互联网上...

    Xcode_3.2.5免证书开发调试

    ### Xcode 3.2.5免证书开发调试详解 #### 背景与问题 在使用Xcode进行iOS应用开发的过程中,开发者经常会遇到“CodeSign error: a valid provisioning profile matching the application’s Identifier ...

    Xcode_免证书开发调试_ipad_程序开发.pdf

    ### Xcode免证书开发调试ipad程序开发 #### 一、环境搭建与注意事项 为了能够进行iPad程序开发,首先需要确保拥有一个稳定的开发环境。这包括安装Mac OS X操作系统以及Xcode开发工具。 1. **操作系统与开发环境的...

    iOS13.X.zip

    4.2 证书问题:如果设备上出现“无法验证应用”的提示,可能是因为开发者证书问题,需要检查并更新开发证书。 4.3 版本兼容性:确保应用的最低iOS版本支持设置得足够低,以便在所有目标设备上运行。 总结,iOS ...

    VMWare 上搭建iOS开发环境SOP

    在发布应用前,需要在Apple Developer Portal中创建并下载两种类型的证书:Developer Certificate(开发证书)用于真机调试,Distribution Certificate(发布证书)用于提交App Store。同时,还需要Provisioning ...

    iOS 11 App Development Essentials Learn to Develop iOS 11 Apps with 无水印转化版pdf

    ##### 4.1 启动 Xcode 9 - **启动 Xcode**:双击桌面上的 Xcode 图标即可启动。 ##### 4.2 创建 iOS 应用界面 - **使用 Interface Builder**:Xcode 内置的 Interface Builder 工具可以帮助快速创建美观的应用...

    苹果上架流程

    - **步骤 4.5**: 如果是开发者证书, 需要绑定真机进行调试。如果没有事先添加设备, 需要输入设备的 UDID 添加; 发布用的 PP 证书则无需绑定设备。 #### 二、配置项目环境 **5. 配置项目环境** - **步骤 5.1**: 在...

    马上着手开发 iOS 应用程序 Start Developing iOS Apps Today

    **4.2 利用Xcode资源** - **关联帮助文章(Articles)**:提供关于Xcode的使用指导。 - **使用指南(Guides)**:涵盖通用概念和最佳实践。 - **API参考(API References)**:详细介绍类、函数、属性等API。 - **快速帮助...

    ArcGIS API for iOS开发教程 v0.12

    - **调试与测试**:在模拟器或真机上进行调试和测试。 #### 4. 添加动态图层和切图缓存图层 ##### 4.1 动态图层 - **定义图层**:创建动态图层对象并设置其属性。 - **加载图层**:将动态图层添加到地图视图中。 ...

    Udemy unity iOS游戏开发者指南糖糖危机

    学习如何设置iOS开发环境,包括安装Xcode、配置Unity与Xcode的连接、理解iOS模拟器和真机调试等。 #### 2.3 iOS平台特有功能 探讨iOS平台上独有的功能和技术,比如触控事件处理、Retina显示屏支持、iCloud存储服务...

    基于IOS平台美食应用软件毕业设计.docx

    4.2 测试与调试 在开发过程中,使用Xcode的内置调试工具进行单元测试和集成测试,确保代码无误。同时,通过真机或模拟器进行功能测试,检查应用在不同设备上的兼容性和性能表现。 5 总结与展望 通过对iOS平台美食...

    iphon开发秘笈

    - **使用调试器**:利用Xcode内置的调试工具来查找和修复错误。 **1.10 苹果公司的iPhone开发人员计划** - **开发电话**:注册成为开发者后,可以使用真机进行开发和测试。 - **应用程序标识符**:每个应用程序都...

Global site tag (gtag.js) - Google Analytics