|
|
(31 intermediate revisions by 13 users not shown) |
Line 1: |
Line 1: |
| Xcode is ''the'' IDE endorsed by Apple for iPhoneOS development. The latest stable version is 4.6. It comes with the official iOS SDK. | | '''Xcode''' is ''the'' IDE endorsed by Apple for iOS development. The latest stable version is 13.4.1. It comes with the official iOS SDK. |
|
| |
|
| == Developing without Provisioning Profile ==
| | Since iOS 9 / XCode 7, it is now possible by default to deploy and develop apps for your device without a $99/year developer account. |
| To develop for the devices one should first obtain a provisioning profile by joining the iPhone Developer Program (which costs $99). However, some simple tricks can be used to make Xcode compile and debug on jailbroken devices without provisioning profiles.
| |
|
| |
|
| These steps are designed for the most recent version of Xcode and iOS SDK, but should also work for versions after Xcode 3.2/iPhone SDK 3.x. If for some reason you are stuck with Xcode 3.1.x, try [http://iphonesdkdev.blogspot.com/2009/06/use-xcode-312-to-build-sdk-30-app-to-30.html].
| | For bypassing restrictions on 7 day signing windows, see [[AppSync Unified]] |
|
| |
|
| === Compiling ===
| | For notes about using Logos and Theos with Xcode, see [[Xcode Logos]]. |
| Performing these steps allows you to use Xcode to compile any applications and deploy it yourself.
| |
|
| |
|
| * '''1.''' Create a self-signed code-signing certificate with the name “iPhone Developer” on the “login” (default) keychain using Keychain Access<ref>Procedures can be found in http://developer.apple.com/mac/library/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html</ref>.
| | App Store Download Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12 |
| * '''2.''' Open <tt>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist</tt> (4.2 or below: <tt>/Developer/Platforms/iPhoneOS.platform/Info.plist</tt>). You may need root permission.
| |
| * '''3.''' Replace all occurrences of <tt>XCiPhoneOSCodeSignContext</tt> by <tt>XCCodeSignContext</tt>. There are three of them (XCode Version 3.2.4+).
| |
| * '''4.''' Save the file and restart Xcode.
| |
| or
| |
| Issue the following commands in terminal:
| |
| <source lang="bash">
| |
| #!/bin/bash
| |
| InfoPlist=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist
| |
| cp $InfoPlist .
| |
| cp Info.plist Info.plist.original
| |
| plutil -convert xml1 Info.plist.original
| |
| sed -e "s/XCiPhoneOSCodeSignContext/XCCodeSignContext/g" Info.plist.original > Info.plist
| |
| plutil -convert binary1 Info.plist
| |
| sudo cp Info.plist InfoPlist
| |
| </source>
| |
|
| |
|
| If you upgrade the iOS SDK, you need to perform steps 2 – 4 again.
| | The latest stable and beta versions can also be downloaded directly from: |
| | https://developer.apple.com/download/applications/ |
|
| |
|
| === Replacing codesign with ldid ===
| | Note this page also requires signing in with your Apple ID. |
| These steps are necessary for debugging, since the entitlement can no longer be inserted by performing steps 1 – 4. To actually debug your app, make sure you have add <tt>-gta</tt> to '''Other Code Signing Flags''' of your target.
| |
|
| |
|
| * '''5.''' Make sure you have ldid on your Mac<ref>If not, you can install from [http://pdb.finkproject.org/pdb/package.php/ldid Fink], compile it from git://git.saurik.com/ldid.git, or just download https://github.com/downloads/rpetrich/ldid/ldid.zip. Note that the version from [https://github.com/mxcl/homebrew/blob/master/Library/Formula/ldid.rb homebrew] was outdated!</ref>. Place a copy somewhere e.g. in <tt>/usr/local/bin</tt>.
| |
| * '''6.''' Create the a Python script <tt>ldid3.py</tt> right next to the <tt>ldid</tt> program. Make it executable. Fill it with:
| |
| <source lang="python">
| |
| #!/usr/bin/env python
| |
|
| |
| from sys import argv
| |
| from subprocess import check_call
| |
| from os.path import basename, dirname, splitext, join
| |
| from tempfile import NamedTemporaryFile
| |
|
| |
| app = argv[-1]
| |
| ldid_path = join(dirname(__file__), 'ldid')
| |
| obj_path = join(app, splitext(basename(app))[0])
| |
|
| |
| if '-gta' not in argv:
| |
| check_call([ldid_path, '-S', obj_path])
| |
| else:
| |
| with NamedTemporaryFile('w+b', 0) as f:
| |
| f.write("""
| |
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
| |
| <plist version="1.0">
| |
| <dict>
| |
| <key>get-task-allow</key>
| |
| <true/>
| |
| </dict>
| |
| </plist>
| |
| """)
| |
| check_call([ldid_path, '-S' + f.name, obj_path])
| |
| </source>
| |
| * '''7.''' Open <tt>iPhoneCodeSign.xcspec</tt>. This file can be found in:
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Xcode version
| |
| ! Path
| |
| |-
| |
| | 4.5 - 4.6
| |
| | <tt>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneCodeSign.xcspec</tt>
| |
| |-
| |
| | 4.3
| |
| | <tt>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS Build System Support.xcplugin/Contents/Resources/iPhoneCodeSign.xcspec</tt>
| |
| |-
| |
| | 4.2
| |
| | <tt>/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS Build System Support.xcplugin/Contents/Resources/iPhoneCodeSign.xcspec</tt>
| |
| |-
| |
| | Before 4.2
| |
| | <tt>/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS Build System Support.xcplugin/Contents/Resources/iPhoneCodeSign.xcspec</tt>
| |
| |}
| |
|
| |
| * '''8.''' Change the entry in the file from calling <tt>codesign</tt> to <tt>ldid3.py</tt>. Specifically:
| |
| ** Convert the file to a human editable format (esp. in Xcode 4.6 or above). You may skip this if the file is already in plain-text or XML format.<source lang="bash">
| |
| sudo plutil -convert xml1 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneCodeSign.xcspec
| |
| </source>
| |
| ** Replace the entry (which should be near the beginning of the file)<source lang="xml"><key>CommandLine</key><string>/usr/bin/codesign</string></source>with<source lang="xml"><key>CommandLine</key><string>/usr/local/bin/ldid3.py</string></source>
| |
|
| |
| or
| |
| <source lang="bash">
| |
| #! /bin/bash
| |
| xcspec=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneCodeSign.xcspec
| |
| cp $xcspec .
| |
| cp iPhoneCodeSign.xcspec iPhoneCodeSign.xcspec.original
| |
| sed -e "s|/usr/bin/codesign|/usr/local/bin/ldid3.py|g" iPhoneCodeSign.xcspec.original > iPhoneCodeSign.xcspec
| |
| sudo cp iPhoneCodeSign.xcspec $xcspec
| |
| </source>
| |
|
| |
| * '''9.''' Save the file and restart Xcode.
| |
|
| |
| If you upgrade the iOS SDK, you need to perform steps 8 – 9 again.
| |
|
| |
| === Allowing apps with invalid signatures to be installed ===
| |
| These steps allow you to install an unsigned app to the device. This method only works for iOS 4.0 or above.
| |
|
| |
| * '''10.''' Create a file <tt>/var/mobile/tdmtanf</tt> on the device, to enable Apple's "TDMTANF bypass" in <tt>installd</tt> (warning: doing so will also put you in a sandboxed GameCenter<ref>https://discussions.apple.com/thread/2745420?start=0&tstart=0</ref>).
| |
|
| |
| If you upgrade the firmware, you need to do step 10 again.
| |
|
| |
|
| == References == | | == References == |
| <references/> | | <references/> |
| | |
| | [[Category:Development Tools]] |