zoukankan      html  css  js  c++  java
  • Xcode 6 免证书真机调试

    前景:在 iOS 开发中,如果想进行真机调试,普遍情况是掏钱,掏钱的情况有两种:

    第一种就是:直接在 Apple 官网注册为 Developer,每年99美元;当然这种作为个人开发者的话,是很有必要的,不仅可以真机调试,而且可以发布用于测试和正式上架的 App。而且现在最新政策,iOS 和 OS X 开发的缴费也合并为一块了,还是每年99美元,对于即搞 iOS 又搞 OSX 开发的朋友来说,这是好福利啊。

    第二种就是:万能的淘宝里,买别人针对设备来收费的测试证书,价钱普遍10-15块左右。资源分享这是好的,对只是测试时真机调试用已经足够了。

    不掏钱的情况也有两种:

    第一种就是:最新发布的Xcode 7 beta 版本支持 Apple ID 普通账号使用免费证书进行真机调试,不像之前版本只是支持 Apple ID 开发者账号。但个人亲测,Xcode 7 beta 版本使用有点问题(纯粹个人问题),其实还是挺好用的,所以暂时还是使用稳定版的Xcode 6。

    第二种就是:修改Xcode 6 的包内容,避开 Apple 的证书验证机制,这里就来介绍这种做法吧。

    准备工作:

    (1)一台越狱的设备,这里我用 iOS 8.1 版本已越狱的 iPhone 6 来测试;

    (2)设备已安装支持未认证安装App的 AppSync 插件;这里可以在已越狱的设备中通过 Cydia 添加威锋源:http://apt.weiphone.com,下载适合版本的 AppSync 插件。

    关键步骤如下:

    (1)创建证书

    然后点「继续」,全部默认,一直下一步,直到创建完成。

    (2)修改 Xcode 6 的包内容

    考虑可以先备份 SDKSettings.plist文件,然后拷贝一份到其它目录下,修改完相关设置了再覆盖。

    SDKSettings.plist 有两处地方需要修改为 NO,就是「DefaultProperties」下的「ENTITLEMENTS_REQUIRED」和「CODE_SIGNING_REQUIRED」项;

    同理,返回上一层目录,Info.plist 有三处地方需要修改为 XCodeSignContext,分别是「DefaultProperties」下的「CODE_SIGN_CONTEXT_CLASS」项、「RuntimeRequirements」下的「Classes」「Item 0」项、「OverriderProperties」下的「CODE_SIGN_CONTEXT_CLASS」项。

    (3)需要创建 iphoneentitlements 文件夹,新建 gen_entitlements.py文件,并拷贝 iphoneentitlements 文件夹到 “/Applications/Xcode.app/Contents/Developer/” 目录下

    PS:可以在终端使用 mkdir 创建文件夹,cd 导航到某目录下,mv 重命名文件

    gen_entitlements.py 内容:

     1 #!/usr/bin/env python
     2 import sys
     3 import struct
     4 if len(sys.argv) != 3:
     5     print "Usage: %s appname dest_file.xcent" % sys.argv[0]
     6     sys.exit(-1)
     7 APPNAME = sys.argv[1]
     8 DEST = sys.argv[2]
     9 if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
    10     print "Dest must be .xml (for ldid) or .xcent (for codesign)"
    11     sys.exit(-1)
    12 entitlements = """
    13     <?xml version="1.0" encoding="UTF-8"?>
    14     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    15     <plist version="1.0">
    16     <dict>
    17     <key>application-identifier</key>
    18     <string>%s</string>
    19     <key>get-task-allow</key>
    20     <true/>
    21     </dict>
    22     </plist>
    23     """ % APPNAME
    24 f = open(DEST,'w')
    25 if DEST.endswith('.xcent'):
    26     f.write("xfaxdex71x71")
    27     f.write(struct.pack('>L', len(entitlements) + 8))
    28 f.write(entitlements)
    29 f.close()

    在终端输入如下命名来给文件设置访问权限(下一步时会无回显方式要求输入密码):

    1 sudo chmod 777 /Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py

    (4)针对需要进行真机调试的 App 工程,进行如下设置:

    Script内容:

    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

  • 相关阅读:
    Python之struct模块浅谈
    看头发知健康
    ZeroMQ:云计算时代最好的通讯库
    粗盐热敷疗法经验汇总
    百度2011校招笔试算法题一
    new/delete 和malloc/free 的区别一般汇总
    Trie字典树
    百度2012校招笔试题之全排列与组合
    百度2011校招笔试算法题二
    执行程序的内存分布总结
  • 原文地址:https://www.cnblogs.com/huangjianwu/p/4573916.html
Copyright © 2011-2022 走看看