xcode免证书真机调试iphone(ipad)程序的具体方法(总结贴))-阿里云开发者社区

开发者社区> 雪人泰山> 正文

xcode免证书真机调试iphone(ipad)程序的具体方法(总结贴))

简介: 原文地址:http://bbs.weiphone.com/read-htm-tid-2850022.html 有关xcode免证书调试程序的文章,在网上有一大堆,但是其中有许多错误和以讹传讹的地方,并且没有介绍基本原理。
+关注继续查看

原文地址:http://bbs.weiphone.com/read-htm-tid-2850022.html

有关xcode免证书调试程序的文章,在网上有一大堆,但是其中有许多错误和以讹传讹的地方,并且没有介绍基本原理。
因此我想简单总结一下,方便新人使用:

0、背景知识:xcode是开发phone、ipad的必备开发工具,开发的程序可以通过xcode自带的iphone、ipad模拟器运行。但是不能把程序传到真实的设备上进行调试和运行。开发者必须购买99美元/年的开发账户,才能再真机上运行和调试程序。本文就是讲述如何通过破解xcode,使得用户可以不需要购买99美元开发账户,就能在真机上调试程序。注意:运行程序的iphone或ipad必须要越狱,而且开发人员如果在appstore上发布程序,那就必须购买开发账户。

1、创建个人证书(使用实用工具-钥匙串访问 命令创建,具体步骤在网上有很详细的介绍,这里不详述了)。(非必要步骤)
新建立的个人证书没有经过苹果认证,是不可信证书,因此在正常情况下,xcode不可能使用这个证书,所以必须对xcode进行破解才行。不过破解xcode之后,使用不可信的伪证书和不使用证书的效果一样的,因此这个步骤并不是必须的。

2、修改Xcode的配置文件和二进制文件,破解xcode。
这是至关重要的步骤,对xcode进行破解,才能让其不使用证书或使用伪造证书向iphone上传和调试ios程序。

保证Xcode处于关闭状态,命令行终端,复制粘贴下面的代码:


#!/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 “\x8f\x2a\x00\x00″ >> working
dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504
/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


以上代码对support.xcplugin文件进行来修改。


3、修改xcode的配置文件
①cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/
新增如下两项:
PROVISIONING_PROFILE_ALLOWED = NO
PROVISIONING_PROFILE_REQUIRED = NO


②替换“/Developer/Platforms/iPhoneOS.platform/Info.plist”文件部分单词:
将所有“XCiPhoneOSCodeSignContext”替换为“XCCodeSignContext”


4、打开xcode,修改具体项目的配置(此步骤以后在每次新建项目的时候都得进行)
开启Xcode->然后打开自己的项目->菜单选择(Project>>Edit Project Setting)->选择“Build”面板->找到Code Signing Identity项,并将“Code Signing Identity”更改赋值。两种方法:
1)如果你建立来伪造的证书“iPhone Developer”(名字可以随便起),这里就可以选择你建立证书的名字。
2)如果没有建立证书,这里选择“Don't Code Sign”

5、建立Code Signing Entitlements文件。
没有这个文件,虽然程序可以上传到iphone上运行,但是xcode不能调试iphone上的程序。

建立Code Signing Entitlements有两种方法:
1)方法一:利用脚本文件进行建立(注意,此方法我在实验时,没有成功,正在查找原因,添加的脚本没有执行)
①连接互联网后执行
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

注意:这里的新建立的目录iphoneentitlements401 名称可以随便起,但在后面脚本文件使用时需注意目录名称统一。

②添加自定义的生成脚本
在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

2)方法二:手工添加文件
①在工程中按照这个执行创建一个名为:Entitlement.plist 文件,具体方法是:打开 File Menu, 选择 New File -> iPhone OS -> Code Signing -> Entitlements. Name the file “Entitlements.plist" ,然后点击 ‘Finish’. 

②打开  这个  “Entitlement.plist"文件,将 “Can be debugged”属性值改为 “YES”,将“get-task-allow”属性值改为“YES”。(建立的时候,默认好像就是YES)

③将Code Signing Entitlements 那项的值改为刚刚新建得“Entitlements.plist".

经过上述5个步骤,就可以在iphone上免证书,调试程序了。

这是我自己的总结,请各位批评指正。

附1:生成IPA文件(本人未测试)
如果我的程序调试好了,怎么才能发给别人用呢?正常情况下IPA文件是从Xcode的Organizer中输出的,但是我们没有证书,这样输出会产生错误。我们只能用个小trick来完成这个操作了。


先将代码生成为Release目标,然后打开工程的输出文件夹,通常情况下这个目录是
/Users/你都用户名/Library/Developer/Xcode/DerivedData/以工程名打头的文件夹/Build/Products/Release-iphoneos
这个目录下有个.app的文件,就是生成的程序了。把这个.app拖到iTunes中,它会出现在应用程序那个列表中,然后再把它从iTunes的那个列表中拖出来(比如拖到桌面),就变成.ipa了。

附2: 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()


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9485 0
自动创建数据库镜像,证书交换
脚本有2个部分,1.证书交换,2.配置镜像 只实现了简答的功能,比如镜像证书配置的检查,容错目前都还没有做 1.证书交换 $SourceServer='192.168.5.7' $SourcePath='d:\SQL Backups' $SourceUser='adminator' $Source...
787 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11786 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13168 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11502 0
透视HTTP协议-HTTPS、对称加密与非对称加密&数字签名与证书
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! HTTPS为什么要有HTTPS,简单的回答是“因为HTTP不安全”。什么是安全?通常认为,如果通信过程中具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性、身份认证和不可否认。
1115 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6886 0
+关注
雪人泰山
把每个细节都做好 ,精益求精
113
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载