Xcode: Difference between revisions

From iPhone Development Wiki
(→‎Developing without Provisioning Profile: adding link to newer guide)
(Entire page has been obsolete since iOS 9)
Tag: Replaced
 
(30 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.


'''Update: As of August 2103, the following instructions are probably outdated. See [http://www.sysrage.net/guides/ios-programming/building-and-running-ios-applications-without-a-paid-developer-license Building and Running iOS Applications Without A Paid Developer License] for a newer guide.'''
For bypassing restrictions on 7 day signing windows, see [[AppSync Unified]]


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.
For notes about using Logos and Theos with Xcode, see [[Xcode Logos]].  


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].
App Store Download Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12


=== Compiling ===
The latest stable and beta versions can also be downloaded directly from:
Performing these steps allows you to use Xcode to compile any applications and deploy it yourself.
https://developer.apple.com/download/applications/


* '''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>.
Note this page also requires signing in with your Apple ID.
* '''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.
=== 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 [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]]

Latest revision as of 05:56, 30 June 2022

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.

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.

For bypassing restrictions on 7 day signing windows, see AppSync Unified

For notes about using Logos and Theos with Xcode, see Xcode Logos.

App Store Download Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12

The latest stable and beta versions can also be downloaded directly from: https://developer.apple.com/download/applications/

Note this page also requires signing in with your Apple ID.


References