An iOS toolchain for Windows. That's to say, build tools for developers who are accustomed to Windows and don't like to be forced to use Apple software to create, build and deploy their native iOS apps.
Developers. From intermediate to expert, or even beginners that are serious enough to not expect a magical point-and-click thing : a reasonable knowledge of either C/C++ or Objective-C/C++ is expected to start building an iOS app.
Save time. If you are accustomed to development on Windows and know next to nothing about OS/X, the learning curve may be steep. Especially if you're just supposed to use Xcode to build a project generated by a third-party tool that works on Windows, such as the Unity editor or PhoneGap/Cordova, having the possibility to build and deploy directly from Windows without ever rebooting into your Mac will save you a lot of time — and I mean a lot.
Learn. The inner architecture of an iOS app is not very complicated, but Xcode hides it all under the curtain. Having a toolchain that works on a familiar ecosystem and does things more simply than what Xcode does is an ideal learning tool. Watch your app being compiled, linked, signed and packaged in an intelligible way.
Be creative. With complete control over the generation toolchain, you get complete control over the type of binaries that you produce. You can thus build a lot more things than what Xcode allows you to. For example, you can create new tweaks or system services that will work on jailbroken phones. PC Networking (available on Cydia), made with this toolchain, is a good example.
How do I use it?
Plug the toolchain in your favourite IDE (Eclipse, EditPad Pro, Visual Studio, etc.) A basic project creation helper wizard is provided that creates iOS projects for Visual Studio. For all the other IDEs, the user is expected to have enough knowledge of his IDE to do that by himself. In the worst case, it's always possible to invoke the build tool from the command line in the project directory.
Then, open your favourite IDE and start coding (in C, C++, Objective-C, Objective-C++, or even ARM assembly). You can use one of the provided example projects to get you started. Once you're happy with your code, hit the usual build button (or invoke the build script from the command line), and watch your app being compiled, linked, signed, packaged into an ipa file, and served for OTA deployment to your iDevice.
Please note: except for Unity projects, auto import of existing Xcode projects is not supported (yet). However, Xcode projects generated by the Unity editor can be built directly, without the need to open them, using the Unity project builder tool.
What's in the package?
The iOS Build Environment features:
- The same compiler as Xcode — which means all the ObjC language features (ARC, blocks, etc) are supported.
- The same linker as Xcode — which means you can produce both armv7 and arm64 binaries (32 and 64-bit).
- The same binary utilities as Xcode — to examine, modify, split, merge, hack, boil, cook and spice the resulting files.
- a code signature tool that enables your app to be deployed on your iDevice using your own iOS signing identity.
- a certificate, private key and provisioning profiles management tool to help you setup or migrate your signing identity.
- an iTunes Connect upload tool to send your .ipa files to the App Store.
- a Unity project builder.
- a remote debug console, to display log messages from your app on your PC while your app is running and receive stack traces when it crashes.
- an OTA app deployment tool to deploy your app to your iDevice over Wifi.
- a versatile command-line project builder.
- a debugger for iOS.
- a Visual Studio project creation wizard and build script creator.
- an automatic .plist file converter, from binary to text and vice versa.
- a PNG file normalizer.
As well as 20 examples, including source code and build scripts, compilable out of the box.
The languages this toolchain can build are:
- ARM assembly
The Right Tool for iOS Software Professionals
Game companies that build apps everyday typically integrate these tools in their production toolchain, usually shortening it quite significantly.
If you're a Unity developer, build and deploy your Unity project for iOS on Windows in 1 click!
For those of you who run a UNIX build server, a Linux and FreeBSD version of these tools is available on request — contact me.
Concerned about the viability of this solution ? Sign up for a readonly SVN access and stay up to date with the toolchain source code — contact me.
How much is it?
Activating the toolchain (to be able to create signed apps that work on non-jailbroken devices and upload them to the App Store) is US$ 45. This floats around € --.-- at the moment.
Buying the source code of this product is possible through a yearly SVN subscription. Contact me me for details.
Payment is done through Paypal so you don't need to worry about exchange rates. Bank transfer is also possible — contact me.
As for the other IDEs: basically, any IDE that can bind a shell command to a button or a hotkey will work. And even, in the worst case, there is still the possibility to build your app from the command-line.
stderr, as well as the
NSLog()macros that are provided by the iOS SDK, to log your program's activity to the remote debug console. If your device is jailbroken, you have even more power: you can run your app inside a debugger on the device itself by installing gdb, the GNU Debugger (the package is provided, as well as a quick handling tutorial). Personally, I do my debug in-situ using logging macros with the remote debug console, and I use gdb for the bugs that the first method fails to put into evidence. Also, if your app uses a subsystem that interfaces with iOS, such as Cordova (ex-PhoneGap) or Unity, you may debug your app directly from a web browser or the Unity editor on your PC.
· For the Modmyi repository, it's here: http://modmyi.com/devportal (the process is automated)
· For the BigBoss repository, it's here: http://thebigboss.org/hosting-repository/submit-your-app
· For the other repositories, please refer to their owner's website.
From the iOS SDK agreement :
2.2 Permitted Uses and Restrictions
Subject to the terms and conditions of this Agreement, Apple hereby grants You during the Term, a limited, non-exclusive, personal, revocable, non-sublicensable and non-transferable license to:
(a) Install a reasonable number of copies of the SDK on Apple-branded computers owned or controlled by You, to be used internally by You or Your Authorized Users for the sole purpose of developing or testing Applications; and
(b) Make and distribute a reasonable number of copies of the Documentation to Your Authorized Users for Your internal use only and for the sole purpose of developing or testing Applications.
Developers of iOS apps are entitled to install the iOS SDK on computers running Microsoft Windows, provided they are Apple-branded (in extenso: running Boot Camp). They may perfectly choose to develop iOS apps on the Windows side of their Apple-branded computer rather than using the Xcode software on macOS, for personal convenience reasons.
I am thus allowed to provide these developers with means to use this SDK on the Windows side of their Apple-branded computer. Whether they install it on their Apple-branded computer like Apple requires them to or on any other PC, although I am legally obliged to disapprove the latter case, is beyond my responsibility.
+ mobileFX (http://www.mobilefx.com) - Marketing software
+ Sproing Interactive Media (http://www.sproing.at) - One Jump Ahead!
+ (Other sponsors chose not to be disclosed)
If you wish to sponsor this project, let's get in touch so we can discuss the terms.
- Fixed a logic flaw in the Xcode project parser when looking for a grouped file's path prefix.
- Fixed a regression bug introduced with v3.0 where the upload script was no longer working as expected (I should take some rest).
- Fully 64-bit toolchain allows to generate very large object files on most recent iOS architectures.
- Upgraded Clang compiler to version 4.0.0 (latest).
- Upgraded ld64 linker to version 274.2 (latest) in multithreaded mode.
- Upgraded cctools to version 895 (latest).
- Improved linking times thanks to threaded linker and archive creation time thanks to better libzip tuning.
- The compiler now reads its flags from flag files allowing for virtually unlimited compiler flags, overcoming the 1024 char barrier.
- Smaller ipa archives thanks to binary stripping when building in release mode.
- The migration assistant now also migrates the existing signing identities and provisioning profiles.
- Added the ability to import several certificates from a .p12 file.
- Better parsing of include files in .pbxproj files generated by the Unity editor allow the building of more complex projects out of the box.
- Simplified OTA deployment using a data matrix: flash the code, your app installs.
- OTA deployment to multiple devices is supported (one at a time, press ESC to stop).
- All projects (including Unity projects) can have their standard output redirected to the remote debug console.
- The remote debug console receives a stack dump over the air when your application crashes if debug symbols are not stripped.
- Added the possibility to load/save builder configuration files and open them by double-click in the iOS Project Builder for Unity.
- Simplified sample projects configuration and project creation wizard.
- Sample project configurations are no longer stored in Makefiles but in batch scripts.
- Many miscellaneous fixes.
- 32-bit Windows support has been dropped.
- Added support for .tbd files to be correctly seen as libraries in the "pbxprojparse" Xcode project file parser.
-fvisibility=hidden) that can drastically reduce the size of your binaries by crunching the LINKEDIT segment to 1:10 of its size in the list of default compiler flags (credits: K. Sokharev). The side-effect is that all symbols that are not explicitly exported in your code with
__attribute__((visibility("default")))will no longer be accessible from outer space.
- Worked around a problem where some (many) third-party Unity plugins would leave incorrect pathname syntaxes in the project's .pbxproj file, by forcing all path separators to forward slashes.
- Upgraded clang/llvm compiler to version 3.9.0 + patches.
- Upgraded cctools binary utilities to version 886.
- Link-time optimization (LTO) support.
- LLVM bitcode support.
- Added build configurations support.
- Bumped all sample project's minimum supported iOS version to 6.
- Miscellaneous fixes (build logic, entrypoint selection, undocumented ld64 V2 TBD support).
- Fixed compiler include traversal chain problem.
- Unity: explicit Vuforia plugin support.
- Added a new build step: user-suppliable pre-packaging script.
- Updated the generated template code in the project creation wizard tool.
- Implemented a PHP-like stat() cache in the compiler that speeds up compilation quite significantly.
- Fixed a bug in the symlink code where two adjacent dir separators in a path caused a compiler crash.
- Fixed a bug where some special characters in passwords were incorrectly escaped.
- Fixed a bug where round iOS version numbers would generate some incorrect Info.plist key values.
- Repaired compatibility with Google's iOS mobile ads SDK and framework.
- Miscellaneous fixes.
- Restored Unity 4.6 and 4.7 support.
- Upgraded cctools binary utilities to version 877.8.
- Upgraded ld64 Mach-O linker to version 253.9.
- Improved code signer to support V2 resource envelopes, entitlements and resource sorting.
- Upgraded Cordova library version in sample project to Cordova4.
- Miscellaneous fixes.
- Separated compiler-specific includes from the main SDK.
- Build flag updates for Unity.
- Miscellaneous fixes.
- Upgraded clang/llvm compiler to version 3.7.
- Upgraded cctools binary utilities to version 870.
- Upgraded ld64 Mach-O linker to version 253.3.
- Unity 5.2.3 support with the ability to include external frameworks directly from the builder.
- Rewrote Xcode project parser (pbxprojparse).
- Added symbolic links in include and import directives support in Clang even on Windows.
- Dropped Windows XP support.
- Upgraded clang/llvm compiler to version 3.6.
- Upgraded cctools binary utilities to version 862
- Upgraded ld64 Mach-O linker to version 241.9.
- 64-bit code generation (arm64, arm64v8) is now considered stable.
- Better support for non-alphanumeric characters in passphrases.
- Much improved Unity Xcode project parsing.
- Upgraded clang/LLVM compiler to version 3.5.0, cctools binary utilities to version 855 and ld64 linker to version 236.3.
- Increased linker stack size to 8Mb to enable linking large projects.
- A default code signing profile can now be specified in the Keychain tool.
- Added an automatic deployment tool for Unity projects.
- Added a sample project using Cordova (PhoneGap).
- Various corrections.
- Updated the RotationDemo sample project for iOS6+.
- Updated the Wolf3D sample project for iOS5+.
- Updated the MobileSubstrate sample for iOS 7.
- Upgraded the clang compiler to version 3.4.
- Deprecated armv6 and iOS < 5 support to prepare the transition towards arm64.
- Added a Unity project builder tool.
- The build system now creates universal binaries (fat mach-o) containing several architectures.
- Separated the generic Makefile templates in bits.
- Removed automatic capitalization of first character in project names.
- Added a button to export a signing identity to a Mac in the Keychain tool.
- Added arm64 support in the lipo and ldid tools (64-bit code signature is now possible).
- The code signer now also supports universal binaries.
- Disambiguated the instructions concerning the export of .p12 files from a Mac's Keychain.
- Automatic insertion of the CFBundleSupportedPlatforms key in the apps' Info.plist.
- Rewritten the Makefile used for building ANEs to better handle third-party libraries (suggestion by Alex Winx).
- Digital identities and code signature are supported (jailbreaking no longer required).
- Added a keychain management tool.
- Upgraded compiler and use of the latest available Apple sources (clang-3.3, ld64-136, cctools-839).
- Important simplification of the Makefiles.
- Compatibility with non-standard shells such as Cygwin.
- No longer depends on iTunes to handle binary .plist files.
- Linux and FreeBSD versions of the toolchain are provided.
- Fixed a bug in strip, where the input file could not overwrite itself when no output file was specified.
- Fixed a bug in makedeb, where some long pathnames would be stored incorrectly in the tar structure.
- Added a console program sample.
- Added the crt_externs.h missing header (forgotten by Apple in the 6.1 SDK).
- Removed the PList editor which was causing false positives by some antiviruses (AVG).
- All PList files (binary or XML) now open in Visual Studio and are automatically converted to binary in the final IPA.
- Added the AppSync packages to the installer.
- Added the possibility to deploy AppSync and the GNU debugger directly from the www.pmbaty.com/cydia source in Cydia.
- Fixed a bug in the demo version.
- Added instructions on how to link a dynamic library or a third-party framework to an iOS project.
- This new installer handles the problem of corrupted or broken downloads.
- This new installer facilitates uninstalling the environment using the Windows control panel.
- Makes use of the latest available Apple sources (ld64-134.9, cctools-836).
- Added the GNU debugger, a debugging tutorial and the according Makefile rules for symbol generation.
- Added armv7s architecture support (Apple A6, iPhone 5/iPad mini).
- Rewrote and improved the code signature manipulation tool.
- Makes use of the latest available Apple sources (ld64-127.2, cctools-809).
- Toolchain is now 100% Win32 and 100% relocatable.
- Fixed a bug in the ar static library archiver.
- Support for the armv7 and armv7f architectures (Apple A5, iPhone 4S/New iPad).
- Memory management by automatic reference counting (ARC) is supported.
- Added the CamTest example.
- Private version for Sproing GmbH and Vicarious Visions Inc.
- Fixed a Makefile bug that could prevent the creation of .deb files with Visual Studio 2010.
- Refactored the SambaSettings and smbtoggle examples into PreferenceLoaderDemo and SBSettingsToggle, with package generation rules.
- Added the WifiScanner example to demonstrate external dylib loading and UIViewController navigation.
- Support for all the APIs of the 5.1.1 SDK.
- Automatic generation of the _CodeSignature directory, mandatory in case of deployment in a non-jailbreaked environment.
- Correction of the instruction set type in use by the assembler (previously armv4t, now armv6 by default).
- Removed the possibility to choose the armv7 instruction set, not supported by the current linker (but will be in a later version).
- Correction of the SRC rule in the default Makefile.
- The SpringBoard icons are automatically refreshed when deploying an app as a .deb file using iFile.
- Added a SpringBoard code injection example via MobileSubstrate.
- Added a graphical remote debugging console applet.
- Newly created projects now support the streaming of error messages to a remote console on the PC.
- Newly created projects now support the redirection of error messages to a log file.
- Added 9 more examples.
- New compiler (clang/llvm), much faster in replacement of GCC.
- Support for the lightweight threads (blocks) Objective-C syntax.
- Compiler errors are better indicated (a mark is displayed below the first incriminated character).
- Better integration with the IDE (a click on a compiler error line takes you directly to the source code).
- Added the possibility to target a minimal supported iOS version for each project.
- Added the possibility to specify the processor instruction set to use (ARMv6 or ARMv7).
- Rearrangement of the build environment directory layout.
- Fixed an ACL permissions problem that could cause the generation of invalid IPAs on some computers.
- Added the /s command-line flag to the PNG normalizer (idea: Per Andersson).
- Extension of the default Makefile rules in the project creation wizard.
- Modified the build script to support project directory relocation (idea: Jonathan Garrett).
- Corrected a typographic bug in the project creation wizard.
- Installing your apps can now be done directly within iTunes.
- Basic Objective-C syntax colouring in Visual Studio (settable option).
- Added an iOS project creation wizard that creates Visual C++ (.vcproj) projects.
- Added a script that enables ARM compilation directly in Visual Studio.
- Added back missing headers in some frameworks.
- Stripped the multi-architecture code from "fat" Mach-O binaries so as to keep only the ARM code.
- Created universal Makefiles.
- Added a PNG image normalizer to convert the Apple PNG files into standard images readable on a PC.
- Added a rotating OpenGL cube as a sample project.
- Added an elaborate 3D game (Wolfenstein 3D) as a sample project.
- Added the Preferences framework for the creation of applications that integrate themselves into iOS Settings.
- Replaced iCopyBot's PList editor with a non commercial version.
- Added basic and useful practical advices in the compiler prompt window.
- Initial release.
"Brilliant software." -- Kai W.
"Instead of spending an hour in XCode to build a working IPA I can do it with blazing speed on my PC [...]. Bless you, dude (no kidding)" -- Armen B.
"This is such a great tool, and I can't wait to recommend it to my students." -- Christopher S.
"I've just tested my project [...], everything went well and the compilation ended successfully which enabled me to try my audio player project in real conditions. Your build environment turns out to be really interesting. Kudos!" -- Louis A.
"Installed and working perfectly on my iphone [...]. I feel the weekend's gonna be productive ;-)" -- Fred D.
"Things worked great from vs2010. Thanks for this project - I'm very happy being able to tinker on windows laptop." -- Jonathan G.
"Thank you Pierre for your great work. As first example i compiled GLCube and tested it [...], ran perfectly. Really great job." -- Nima P.