`
iaiai
  • 浏览: 2196038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
您需要先越狱您的设备并通过Cydia安装AppSync

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

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

2.修改Xcode的配置文件和二进制文件
下面的步骤稍微有点繁琐,您应该了解UNIX命令行的基本操作,并了解一种命令行文本编辑器,本文使用的是vim。尽管这里会给出完整的代码,但是关于修改和保存代码的基本操作,不再赘述。下面的操作请先将Xcode按Command+Q完全关闭

(1)修改配置文件
进入目录并备份原文件(4.1、4.2、4.3在这里主要的差别是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/
(Xcode4.3请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
(Xcode4.3.2请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
(Xcode4.5请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk

sudo cp SDKSettings.plist SDKSettings.plist.orig
进行编辑(Xcode 4.5之前)
sudo vim SDKSettings.plist
将以下两段中的YES改为NO
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>


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


Xcode 4.5的plist格式不再为XML,而是改为了Apple自己的二进制格式,我们使用Xcode本身来编辑这个plist文件,命令是
sudo /Applications/Xcode.app/Contents/MacOS/Xcode ./SDKSettings.plist
会启动Xcode的图形界面,我们展开DefaultProperties分支,将下面的CODE_SIGNING_REQUIRED和ENTITLEMENTS_REQUIRED两个属性改为NO

下面修改另外一个文件
进入目录并备份原文件
(Xcode4.1/4.2请执行)cd /Developer/Platforms/iPhoneOS.platform/
(Xcode4.3/4.4/4.5请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform

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

(Xcode 4.5)编辑命令如下
sudo /Applications/Xcode.app/Contents/MacOS/Xcode /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist
Xcode 4.5也有三处,分别在DefaultProperties分支下、RuntimeRequirements分支下和OverrideProperties分支下。

(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)
#(Xcode 4.3注意)在Xcode 4.3版本中,我没有找到iPhoneOS Build System Support.xcplugin这个插件,因此我跳过了这个步骤,并且最终也成功的进行了联机调试。因此我个人认为Xcode 4.3没有必要执行“二进制补丁”这一步骤。请各位朋友测试~!
#(Xcode 4.3.2/4.4/4.5注意)在Xcode 4.3.2版本中,我们可以找到iPhoneOS Build System Support.xcplugin,但我没有修改它,仍然可以进行联机调试。这个修改步骤是从Xcode 3.X中继承过来的,我们有理由猜测,在Xcode 4.x版本中,已经不需要修改这个文件了。(2012年5月28日更新)

至此,对SDK中配置文件和二进制文件的修改就完成了

3.准备自定义的生成后脚本
连接互联网后执行
#(Xcode 4.1/4.2执行)
引用
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


#(Xcode 4.3/4.4/4.5执行)
引用
mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py


热心网友Ringo_D指出,这里可能涉及到权限问题。我做的时候貌似没有出啥问题,如果您在执行这段代码时遇到Permission denied提示的话,请将相应的语句前面加上sudo以获取超级权限。(2012年6月15日更新)

如果您已经联网,则请直接转到步骤4,如果您没有联网,那么请在相应目录手动创建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,输入以下脚本
(对于Xcode 4.1/4.2)
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" == "iphoneos" ] || [ "${PLATFORM_NAME}" == "ipados" ]; 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.3/4.4/4.5)
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" == "iphoneos" ] || [ "${PLATFORM_NAME}" == "ipados" ]; then
/Applications/Xcode.app/Contents/Developer/iphoneentitlements/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


至此配置全部完成,下面就可以插上iPhone,重新选择生成目标来测试一下在线调试了!如果是第一次使用该设备调试,请先在Organizer中将设备切换为开发模式,具体操作请见常见问题5。

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

相关推荐

    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生成IPA全攻略

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

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

    本文将详细地介绍在iOS 5.1.1上实现免证书开发、真机调试以及生成IPA文件的完整攻略。 首先,开发环境的搭建至关重要。在本文提到的时间点上,开发者们倾向于使用MacOSXLion(MacOS 10.7)操作系统,配合Xcode4.1...

    Xcode 4.2 4.1 免证书开发

    ### Xcode 4.2/4.1 免证书开发详解 #### 一、引言 对于初涉iOS开发领域的爱好者或小型团队来说,高昂的开发者费用无疑是一大障碍。通常情况下,要在真实设备上测试iOS应用或者进行进一步的分发,都需要购买苹果的...

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

    ### XCode 4.2(4.1)真机调试及生成IPA全攻略 #### 一、背景介绍 Xcode是苹果公司提供的官方集成开发环境(IDE),主要用于iOS、macOS、watchOS 和 tvOS应用的开发。Xcode 4.2 (包括4.1) 是苹果在2011年左右发布的...

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

    ### MAC OS X 10.8 + Xcode 4.4 下实现无证书真机调试 IOS5.1.1 #### 知识点一:证书构建与管理 **背景介绍:** 在iOS开发中,默认情况下,为了确保应用程序的安全性和合法性,苹果要求开发者必须通过有效的证书对...

    Xcode iOS 16真机调试包 开发调试

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于构建、测试和发布iOS、iPadOS以及macOS等平台的应用程序。随着iOS系统版本的不断更新,开发者需要确保他们的应用能够兼容并良好运行在最新的操作...

    xcode 4.2 免证书真机调试配置

    1、根据《XCode 4.2 免证书调试之生成本机证书.rtf》制作代码签名证书 2、把“Info.plist”拷贝到“/Developer/Platforms/iPhoneOS.platform/”目录下,把原来的文件重命名 3、把“iPhoneOS Build System Support...

    XCode 4.1 + iOS sdk 4.3

    XCode 最新版本,集合iOS sdk 4.3

    iOS 13.5 真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和真实使用环境下运行无误。iOS 13.5是苹果公司发布的一个重要版本,引入了许多新功能和性能优化...

    iOS真机调试包(Xcode)

    总之,这个“iOS真机调试包(Xcode)”是为了让开发者在最新的iOS版本上更顺畅地进行真机调试,提升开发效率和应用质量。掌握好Xcode的真机调试技巧,对于iOS开发者来说至关重要,它能帮助你在实际使用场景中发现并...

    iOS16.5-真机调试包

    在iOS开发过程中,真机调试是一项至关重要的环节,它允许开发者在实际设备上测试应用程序,以确保软件在各种硬件配置和系统版本上的表现。本文将深入探讨“iOS16.5-真机调试包”这一主题,以及如何利用它进行有效的...

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

    在本文中,我们将详细探讨如何在MAC OS X 10.8系统下,使用Xcode 4.6进行无证书的真机调试iOS 5.1.1应用。这个过程适用于已经越狱的iOS设备,如文中提到的ios5.1.1的越狱后的iPod。以下是实现这一目标的步骤: **第...

    iOS16.5 真机调试包

    iOS16.5 真机调试包, 路径: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 使用方法: 1、下载资源,放入上述路径中; 2、重启Xcode即可使用。

    XCode iOS 16.0真机调试包

    这是16的真机调试包,文件直接解压放到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

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

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

    最新IOS17.0真机调试包

    本文将深入探讨“最新iOS 17.0真机调试包”以及与之相关的Xcode、iOS和Mac开发环境的知识点。 首先,"最新iOS 17.0真机调试包"是指针对苹果操作系统iOS的最新版本17.0,为开发者提供的用于真机调试的工具。在iOS...

    2023【iOS 真机调试支持包】 iOS 16.6 16.5正式版,Xcode 14.3.1 支持

    在iOS应用开发中,真机调试是不可或缺的一部分,它允许开发者在实际设备上测试应用程序,以便更好地模拟用户的真实使用情况。本压缩包“2023【iOS 真机调试支持包】 iOS 16.6 16.5正式版,Xcode 14.3.1 支持”提供了...

Global site tag (gtag.js) - Google Analytics