免iDP编译iPhone app真机执行(转 )

我按这个操做在ipad上成功调试了,也没用装ssh就能够了,因此转 一下html

我用到的步聚:java

3.修改Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[SDK版本].sdk/SDKSettings.plist文件,将CODE_SIGNING_REQUIRED对应的值设置为NO.node

4.打开项目,在Xcode右上角的info里面,选择Building项,Configuration选择Release,在Code Signing->Code Signing Identity->Any iOS device设置为Don’t Code Signspring

5.这时候项目选择Device就能够正常编译经过了xcode

----------------------------------------------网络

由于尝试了不少资料.因此这篇不光是转载了
我把全部尝试方法和最终步骤都记录下来.
网上的资料要不是少步骤要不就是太老
我在IOS SDK 4.1下面测试
环境是
Mac OS X 10.6.4
iPhone 1,1 whited00r 3.1.5(firmware 3.1.3)
iOS SDK 4.1 finalapp

测试下来方法1和方法2都不能经过编译
两种方法结合起来也不行
后来找到方法3
使用方法3终于能够编译经过.产生了release代码
可是复制到iphone上以后只要执行就马上退出
在ssh下面执行的时候直接返回Killed
查阅以后感受是签名仍是有问题,被SpringBoard直接杀掉了
尝试过在iPhone上执行ldid
可是返回以下的错误ssh

codesign_allocate: for architecture armv6 object: ./test malformed object (unknown load command 4)
util/ldid.cpp(582): _assert(0:WEXITSTATUS(status) == 0)

最终使用以下方法关闭iphone证书检测
sysctl -w security.mac.proc_enforce=0
sysctl -w security.mac.vnode_enforce=0iphone

==========================总结:真正运行本身的app过程=========================
1.iPhone安装openssl以及openssh,这个方便之后链接上来操做.固然用91之类的文件管理也能够将编译后的程序放上来ide

2.iPhone的ssh默认密码是alpine,不要用passwd去改.直接修改/etc/passwd文件和备份.具体方法这里不说了.

3.修改Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[SDK版本].sdk/SDKSettings.plist文件,将CODE_SIGNING_REQUIRED对应的值设置为NO.

4.打开项目,在Xcode右上角的info里面,选择Building项,Configuration选择Release,在Code Signing->Code Signing Identity->Any iOS device设置为Don’t Code Sign

5.这时候项目选择Device就能够正常编译经过了

6.将文件上传,这里使用scp,可使用其余方法
mac$scp -r [项目名.app] root@[你的iphone的IP地址]/Applications

7.登陆iphone进行操做,给程序可执行权限而且重启SpringBoard让程序图标能够出现.
mac$ssh root@[你的iphone的ip地址]
iphone$cd /Applications
iphone$chmod +x [项目名.app]
iphone$killall SpringBoard

8.关闭iphone的合法性检查关闭
iphone$sysctl -w security.mac.proc_enforce=0
iphone$sysctl -w security.mac.vnode_enforce=0

9.执行程序成功

==========================总结:测试过程=========================
1.iPhone安装openssl以及openssh,这个方便之后链接上来操做.固然用91之类的文件管理也能够将编译后的程序放上来

2.iPhone的ssh默认密码是alpine,不要用passwd去改.直接修改/etc/passwd文件和备份.具体方法这里不说了.

3.修改Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[SDK版本].sdk/SDKSettings.plist文件,将CODE_SIGNING_REQUIRED对应的值设置为NO.

4.打开项目,在Xcode右上角的info里面,选择Building项,Configuration选择Release,在Code Signing->Code Signing Identity->Any iOS device设置为Don’t Code Sign

5.这时候项目选择Device就能够正常编译经过了

6.在Mac OS X中下载ldid,如下使用mac$标识在mac机执行的指令,iphone$标识在iphone中执行的指令
mac$wget http://svn.telesphoreo.org/trunk/data/ldid/ldid-1.0.610.tgz

7.解压这个包并编译
mac$tar -zxf ldid-1.0.610.tgz
mac$cd ldid-1.0.610
mac$g++ -I . -o util/ldid{,.cpp} -x c util/{lookup2,sha1}.c

8.进入[项目目录]/build/Release-iphoneos/

9.使用ldid对应用程序进行签名
mac$ldid -S [项目名.app]/[项目名]

10.将文件上传,这里使用scp,可使用其余方法
mac$scp -r [项目名.app] root@[你的iphone的IP地址]/Applications

11.登陆iphone进行操做,给程序可执行权限而且重启SpringBoard让程序图标能够出现.
mac$ssh root@[你的iphone的ip地址]
iphone$cd /Applications
iphone$chmod +x [项目名.app]
iphone$killall SpringBoard

12.在iphone上执行程序就直接退出了.

13.从手机的Cydia上搜索下载ldid,登陆ssh以后执行
iphone$ldid -S [项目名.app]/[项目名]
报错

codesign_allocate: for architecture armv6 object: ./test malformed object (unknown load command 4)
util/ldid.cpp(582): _assert(0:WEXITSTATUS(status) == 0)

14.从cydia的网站找到ldid官方的方法
只能将检查关闭
iphone$sysctl -w security.mac.proc_enforce=0
iphone$sysctl -w security.mac.vnode_enforce=0

15.执行程序成功

==========================方法1:制做本身证书=========================
1. 產生證書
由於 XCode 後面的版本都要求應用程式必須經過簽署,也所以你必須要
多花99美圆加入 Developer Program (真是黑呀),反正我又不放到 App Store 賣錢,乾脆本身簽個證書來用不就行了

打開 Key Access 這個工具程式(在應用程式->工具程式內),並创建一個 “iPhone Developer” 名稱的證書(這個名稱不要改,否則你得在專案內改變)

類型選擇”編碼簽名”
輸入憑證資訊
最後選擇存放在”系統”內(不是 “登入”,否則會找不到)
這樣就大功告成了,你已經省下$99了!

2. 專案创建好了後,打開 Project Setting,並在 User-Defined Settings 輸入:
PROVISIONING_PROFILE_ALLOWED = NO
PROVISIONING_PROFILE_REQUIRED = NO

3. 打開 Info.plist,這個檔案主要存放應用程式的相關描述,按右鍵 Add Row,新增 SignerIdentity = “Apple iPhone OS Application Signing” (要一樣的,亂輸好像不行)

11. 選擇要使用的設備,在此我們選擇 Device – iPhone OS 2.2,XCode 會幫我們簽署,按下”允許”(不能按”總是允許”)就能够輸出到你的iPhone了(第一次跑可能會出現 Security policy error,再跑一次
就不會出現了)

==========================方法2:直接生成app=========================
开发安装环境mac OS,而且有wifi,通过越狱(破解)的iphone或者ipod touch.
下面所提到的scp是mac OS的终端命令.
ssh,ldid 和chmod等是iphone的终端命令行,须要安装,cydia等工具

直接进行编译,必会出现错误提示:
CodeSign error: no certificate found in keychain for code signing identity ‘iPhone Developer’

下面咱们先跳过Xcode的签名检查.打开工程文件夹下的*.xodeproj为后缀名的文件(右键点击显示包内容”Show Package Contents”),通常会看到三个文件,以文本方式打开project.pbxproj这个文件,
此時, 打開工程文件夾下*.xcodeproj為後綴名的文件(右鍵點擊, 選擇”Show Package Contents”),搜索iPhone Developer,找到后删除,一共有2处,而后保存,从新进入Xcode编译便可生成App程序.生成的结果在build目录下.

把编译好的release for device的程序拷贝到iphone
先进入MyApp.app所在的目录,而后执行以下命令
siu-andrewde-macbook:release-iphoneos siuandrew$ scp -r MyApp.app root@192.168.0.2:/Applications
提示输入密码
root@192.168.0.2′s password:
而后开始拷贝.

拷贝完成后再次登入Iphone:
siu-andrewde-macbook:release-iphoneos siuandrew$ ssh root@192.168.0.2
root@192.168.0.2′s password:
登入后执行签名工做
iPhone:~ root# cd /Applications
iPhone:/Applications root# ldid -S MyApp.app/MyApp
ldid这一步很是重要,注意-S要大写,耐心等待签名结束.

签名完成进行把整个目录权限设置755
iPhone:/Applications root# chmod +x MyApp.app
设置权限这一步也必不可少,或者用chmod -R 755 MyApp.app

上传及签名工做完成,若是iphone 安装了91关机助手,注销并修复图标便可,不然在iphone机子上要删除installation.plist文件
iPhone:~ root# rm /private/var/mobile/Library/Caches/com.apple.mobile.installation.plist
而后重启动手机便可看到程序的图标.

运行你自编译的App程序.

==========================方法3:不签名app,使用ldid=========================

若是你不是iPhone开发者,可是刚好有mac和iphone在身边,又刚好是个喜欢“hello world”的IT民工,那你必定会想在本身的iPhone上hello world一下。因为你只是玩票,因此确定不会去弄iPhone Development Program ,官方文档天然没有任何供你参考的信息,目前网络上介绍的各类sdk版本的方法大多都已经失效或是混乱,因此发一个简单的说明:

本文测试环境:Snow leopard 10.6.3 + Xcode 3.2.2 + iPhone 3G(3.1.2固件)

前提条件:在Xcode中已经有能够在模拟器上正常运行的Hello World程序 + iPhone已经越狱 + 自己是个没进行过iPhone开发的小白

方案思路:build一个不须要签名的应用,在mac上用ldid伪造签名,经过SSH上传到iPhone上

操做步骤:
sudo vi /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[SDK版本].sdk/SDKSettings.plist , 把CODE_SIGNING_REQUIRED对应的值设置为NO。 – 这是告诉Xcode使用这个SDK build时不用必须签名应用;
在Xcode中修改应用的”info”->”build” -> “Release” -> “Code Signing Identity”,设置为”Don’t Code Sign”,选择构建目标为”iPhone Device – [SDK版本] | Release”,build应该提示无错误。(第一步的配置生效须要重启Xcode) – 此步构建了一个没有签名的app,路径为[项目位置]/build/Release-iphoneos/HelloWorld.app
安装ldid
wget http://svn.telesphoreo.org/trunk/data/ldid/ldid-1.0.610.tgz
tar -zxf ldid-1.0.610.tgz
cd ldid-1.0.610
g++ -I . -o util/ldid{,.cpp} -x c util/{lookup2,sha1}.c
util/ldid 下面就是咱们须要用来伪造签名的ldid程序了
给程序签名
ldid -S [项目位置]/build/Release-iphoneos/HelloWorld.app/HelloWorld (注意这里要写到.app下面的执行文件)
SSH上传到iPhone的/Applications 下面,respring一下就能够看到并使用HelloWorld应用了(SSH应该在你们越狱时都有装,若是没有,到Cydia或Rock中都能装上,不会respring就重启iPhone)

参考资料:

http://bbs.weiphone.com/read-htm-tid-222380.html

http://www.blogjava.net/sealyu/archive/2010/09/14/331968.html

http://blog.robaggio.net/2010/04/idpiphone.html

http://techxter.com/62/code-signing-iphone-applications-using-ldid/

http://www.saurik.com/id/8

相关文章
相关标签/搜索