|
|
(45 intermediate revisions by 19 users not shown) |
Line 1: |
Line 1: |
| Xcode is ''the'' IDE endorsed by Apple for iPhoneOS development. The latest version 3.2.1. It comes with the official iPhone 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 only tested for Xcode 3.2.x and 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]] |
|
| |
|
| == Automatic method (untested) ==
| | For notes about using Logos and Theos with Xcode, see [[Xcode Logos]]. |
|
| |
|
| Just download this script and follow instructions.
| | App Store Download Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12 |
| Script download: [http://www.megaupload.com/?d=6ZGQ1JRL jb_patcher.tar.gz]
| |
|
| |
|
| == Manual method ==
| | The latest stable and beta versions can also be downloaded directly from: |
| | https://developer.apple.com/download/applications/ |
|
| |
|
| === Compiling ===
| | Note this page also requires signing in with your Apple ID. |
| Performing these steps allows you to use Xcode to compile any applications and deploy it yourself.
| |
|
| |
|
| * '''1.''' Create a self-signed code-signing certificate 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>.
| |
| * '''2.''' Open <tt>/Developer/Platforms/iPhoneOS.platform/Info.plist</tt>
| |
| * '''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.
| |
|
| |
| If you upgrade the iPhone SDK, you need to perform steps 2 – 4 again.
| |
|
| |
| === Replacing codesign with ldid ===
| |
| 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 Fink unstable, compile it from http://svn.telesphoreo.org/trunk/data/ldid/, or just download http://code.google.com/p/networkpx/downloads/detail?name=ldid</ref>. Place a copy in <tt>/usr/local/bin</tt>.
| |
| * '''6.''' Create the file /usr/local/bin/ldid2. Make it executable. Fill it with:
| |
| <source lang="bash">
| |
| #!/bin/sh
| |
|
| |
| hasGTA=`expr "$*" : '.* -gta .*'`;
| |
| objpath=${!#}/`expr ${!#} : '.*/\([^/]\{1,\}\)\.app$'`;
| |
|
| |
| if [[ $hasGTA == 0 ]]; then
| |
| /usr/local/bin/ldid -S $objpath;
| |
| else
| |
| TF=`mktemp -t x`;
| |
| echo "<!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>" > $TF;
| |
| /usr/local/bin/ldid -S$TF $objpath;
| |
| rm $TF;
| |
| fi;
| |
| </source>
| |
| * '''7.''' Open <tt>/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS Build System Support.xcplugin/Contents/Resources/iPhoneCodeSign.xcspec</tt>
| |
| * '''8.''' Replace the line saying <tt>CommandLine = "/usr/bin/codesign"</tt> with <tt>CommandLine = "/usr/local/bin/ldid2"</tt>. It should be around line 12.
| |
| * '''9.''' Save the file and restart Xcode.
| |
|
| |
| If you upgrade the iPhone SDK, you need to perform steps 8 – 9 again.
| |
|
| |
| '''NOTE''': ldid only supports thin binaries. Make sure you only build for one architecture in your build settings.
| |
|
| |
| === Allowing apps with invalid signatures to be installed ===
| |
| These steps allow you to install an unsigned app to the device. Embarrassedly, like all other MobileInstallation/installd patches, this allows pirated apps to be installed via iTunes as well.
| |
|
| |
| * '''10.''' Copy <tt>/usr/libexec/installd</tt> from your device to your Mac.
| |
| * '''11.''' Run this:
| |
| install_name_tool -change /usr/lib/libmis.dylib /usr/lib/libmiss.dylib installd
| |
| ldid -S installd
| |
| * '''12.''' Create a file named <tt>libmiss.c</tt>, and enter these into the file:
| |
| <source lang="c">extern int MISValidateSignature() { return 0; }</source>
| |
| * '''13.''' Compile <tt>libmiss.c</tt> to <tt>libmiss.dylib</tt> with <tt>gcc</tt> targeting iPhone:
| |
| # NOTE: Must provide a valid path for -isysroot.
| |
|
| |
| /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 \
| |
| -arch armv6 \
| |
| -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk \
| |
| -dynamiclib \
| |
| -install_name /usr/lib/libmiss.dylib \
| |
| -current_version 1 \
| |
| -compatibility_version 1 \
| |
| -Wl,-reexport-lmis \
| |
| -flat_namespace \
| |
| -o libmiss.dylib \
| |
| libmiss.c
| |
| ldid -S libmiss.dylib
| |
| * '''14.''' Copy the new <tt>installd</tt> to the device's <tt>/usr/libexec</tt>, and the <tt>libmiss.dylib</tt> to the device's <tt>/usr/lib</tt>.
| |
|
| |
| If you upgrade the firmware, you need to do step 14 again.
| |
|
| |
|
| == References == | | == References == |
| <references/> | | <references/> |
| * The original article — http://networkpx.blogspot.com/2009/09/compiling-iphoneos-31-apps-with-xcode.html
| | |
| | [[Category:Development Tools]] |