Saurabh Bisht
Saurabh Bisht

Reputation: 424

Compile IOS program from linux commandline

I want to compile my IOS appication from linux terminal(command line).... Is it possible to do so, if yes, then how?

Upvotes: 14

Views: 10884

Answers (1)

barjomet
barjomet

Reputation: 477

Yes, it's possible.

At least you need:

  1. Assembler and Linker: cctools and ld64 from apple opensource.
  2. Compiler: Clang/LLVM
  3. SDK, include headers and libraries.
  4. Utilities: such as ldid codesign tool.

Step 1 : The compiler

Clang/llvm >= 3.2 is highly recommended and tested.

If you want to build clang/llvm from scratch, Please refer to this link to build a svn version for your linux distribution.

If your distribution already provides clang/llvm packages,make sure it is 3.2 release or above. Lower version may work but isn't tested.

for Ubuntu 13.04 and later, clang/llvm already provided in repos, please run:

$sudo apt-get install gcc g++ clang libclang-dev uuid-dev libssl-dev libpng12-dev libicu-dev bison flex libsqlite3-dev

to install some dev packages, other dev packages related to llvm/llvm-dev should be installed automatically.

Step 2 : The assembler and linker

The latest cctools-855 and ld64-236.3 had been ported from Apple opensource to linux. the porting process is a little bit complicated, also with a lot of codes modified for linux, let's just skip it.

please check out the codes from:

svn checkout http://ios-toolchain-based-on-clang-for-linux.googlecode.com/svn/trunk/cctools-porting

Build it:

$ sed -i 's/proz -k=20  --no-curses/wget/g' cctools-ld64.sh
$ ./cctools-ld64.sh
$ cd cctools-855-ld64-236.3
$
$ ./configure --target=arm-apple-darwin11 --prefix=/usr
$ make
$ make install

For Ubuntu 13.04, since the clang/llvm 3.2 package use a customized libraries/headers path. please setup CFLAGS and CXXFLAGS first before run configure.

$export CFLAGS="-I/usr/include/llvm-c-3.2"
$export CXXFLAGS="-I/usr/include/llvm-c-3.2"

Step 3: The iPhoneOS SDK.

The old iPhone SDK with ARC support extracted from xcode had been provided in Download Sections. You can directly download it and extract it to /usr/share

For iOS 4.2: https://ios-toolchain-based-on-clang-for-linux.googlecode.com/files/iPhoneOS4.2.sdk.tar.xz

For iOS 5.0: https://ios-toolchain-based-on-clang-for-linux.googlecode.com/files/iPhoneOS5.0.sdk.tar.xz

For iOS 6.0: https://ios-toolchain-based-on-clang-for-linux.googlecode.com/files/iPhoneOS6.0.sdk.tar.xz

For other iOS versions, You may need follow these steps to get the SDK for your self.

Step 4: The utilities

iphonesdk-utils is a utility collection for iOS development, provides below utilities:

NOTE: (Some of them are collected from internet with some modifications.)

ldid : codesign tool, with armv7/armv7s support and other changes from orig version. it will be involked by ld64 after link complete. ios-clang-wrapper : automatically find SDK and construct proper compilation args. ios-switchsdk : switch sdk when multiple version of SDK exist. ios-pngcrush: png crush/de-crush tool, like Apple's pngcrush. ios-createProject : project templates ios-genLocalization : iOS app localization tool based on clang lexer. ios-plutil : plist compiler/decompiler. ios-xcbuild : convert xcode project to makefile, build xcode project directly under linux. Download the source tarball from: https://ios-toolchain-based-on-clang-for-linux.googlecode.com/files/iphonesdk-utils-2.0.tar.gz

Build and install it:

$./configure --prefix=/usr
$make
$make install

Build App

Now you can build and install your project simply doing:

$cd ProjectDir
$make
$make install IPHONE_IP=<your own device IP

Complete info you can find here — https://code.google.com/p/ios-toolchain-based-on-clang-for-linux/wiki/HowTo_en

Upvotes: 15

Related Questions