Create, build and deploy real iOS apps

from the Windows side of the force.

Download and try out for free!
Until the software is activated, apps created with it display a popup message.
Real code signing (and support for non-jailbroken devices) also requires activation.

What's that?

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.

For whom?

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.

Why?

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:

As well as 20 examples, including source code and Makefile, compilable out of the box.

The languages this toolchain can build are:

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.

For those of you who run a UNIX build server, a FreeBSD and Linux version of these tools is available upon request — contact me.

If you're a Unity developer, build your Unity project for iOS on Windows in 1 click!

Concerned about the viability of this solution ? Sign up for a readonly SVN access and stay up to date with the toolchain source codecontact me.

How much is it?

Activating the toolchain (to be able to create signed apps and use it on non-jailbroken devices) is US$ 45. This floats around € --.-- at the moment.

Optional subscription to the SVN repository to get the toolchain's source code is US$ 3800, then US$ 760 / year for renewal.

Payment is done through Paypal so you don't need to worry about exchange rates. Bank transfer is also possible — contact me.

FAQ

Does this mean I can use Visual Basic, Delphi, C# or .NET? (most FAQ of all)
No. One can use a Microsoft language, such as Visual Basic, only when Visual Studio is used with the Microsoft build tools. Here, we use Visual Studio with a Windows port of Apple's build tools ; in this configuration, it's obvious that only the languages that Apple supports may be used. This does not include Visual Basic, Delphi, C# or .NET.
What about Swift?
I am missing something in the understanding of the Swift language. Apple say it's compiled by LLVM. Yet they seem to use a compiler frontend, called swiftc, which is not open source and rather obscure. I'm yet to understand how this frontend invokes the LLVM subsystem; if you happen to know, enlighten me and maybe Swift will make it into a future version.
Are updates free? How do I update?
Yes they are. To update your toolchain to the latest version, simply download it from here and reuse your activation code to activate it.
Which versions of Windows are supported? 32 or 64 bits? What about Visual Studio? What about the other IDEs?
The iOS Build Environment works on all versions of Windows from NT 5.1 which means Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2012 and Windows 8/8.1, undistinctively 32 or 64 bits. All the Visual Studio versions from version 2008 are supported, which means Visual Studio 2008, 2010, 2012 and 2013, including Visual C++ Express which is free.
As for the other IDEs: basically, any IDE that can bind a shell command to a button or a hotkey will work. And in the worst case, there is still the possibility to build your app from the command-line.
Is there an iPhone simulator for testing my apps?
Unfortunately, creating a third-party iOS emulator is forbidden by Apple Inc. But testing may be done on the iPhone itself. Also, if your app uses a subsystem that interfaces with iOS, such as Cordova (ex-PhoneGap) or Unity, you may test your app directly from a web browser or the Unity editor on your PC.
Can I debug my apps?
Yes, 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). You can also use all the standard C/C++ file I/O to log your program's activity to a file wherever you want. If you are making a console program, you may use the NSLog() macros that are supported by the iOS SDK. Personally, I do my debug in-situ using logging macros, 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.
Do I need to jailbreak my iPhone/iPod/iPad, and how do I do that?
Only if you wish to develop non-standard apps, or use the debugger directly on your device, you will need to jailbreak it indeed, in order to lift certain restrictions imposed by Apple Inc. on their consumer devices, which are incompatible with a somewhat advanced use of their devices. To do that, visit http://jailbreak-me.info and follow the instructions. This process is 100% legal, reversible, and for its greatmost part automated. No technical skills are required.
How do I submit my app to Apple's App Store?
Apple says that your app's submission must imperatively be done using the Application Loader tool on Mac, so, a Mac will be needed eventually — that's right. But all the process of developing and testing your app may happen in Windows, especially if it's the work environment with which you're the most familiar.
How to submit my app to the Cydia Store?
To send your app to Cydia, it depends on which source (repository) you want to host it.
  · 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.
Can I get the source code of this product?
This product falls under the larger work class of products according to the Apple Public Source License. The original Apple code can be downloaded here. Yet, all the parts of this larger work that are not covered by the Apple license, such as the compatibility layer which I developed to enable the original Apple code to work on non-Apple platforms, as well as the code signing tool, are not open source. Some companies have subscribed for a read-only access to my SVN. If you are interested in such a subscription, please contact me.
Doesn't this product infringe one of Apple's licenses?
There seems to be a lot of concern about this. I am not a lawyer, but here is why, to my knowledge, it doesn't:

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.

Interpretation :

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 OS X, for personal convenience reasons.

I am thus entitled to provide these developers a means to run 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.
Who are you?
I am an independent IT professionnal and an experienced programmer. If you think your company could hire me, feel free to make an offer (contact me here).
Can I sponsor your work, and hurry the development of a particular feature?
Of course! Some companies already used this means so that I could provide them quickly with some features they were interested in. Among those:
+ mobileFX (http://www.mobilefx.com) - Marketing software
+ Sproing Interactive Media (http://www.sproing.at) - One Jump Ahead!
+ Experitest (http://www.experitest.com) - Test automation tool
If you wish to sponsor this project, let's get in touch so we can discuss the terms.

Sponsors

MobileFX - Marketing Software mobileFX
Their upcoming MobileFX Studio 7 IDE will use iOS Build Environment!
Screenshot
Sproing - One Jump Ahead! Sproing GmbH
Specialized in the creation of gaming and multimedia content
"Austria's leading game development studio!"
Experitest - Test automation tool Experitest Ltd
Test automation tools for mobile platforms
"Test automation tool for iOS, Android, Blackberry and WindowsPhone"

Changelog

2015-02-09       iOS Build Environment 2.14
- iOS 8.1 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.
2014-09-28       iOS Build Environment 2.13
- iOS8 support.
- 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.
2014-02-18       iOS Build Environment 2.12
- Fixed a bug that invalidated .deb packages creation for Unity projects.
- Updated the RotationDemo sample project for iOS6+.
- Updated the Wolf3D sample project for iOS5+.
2014-02-11       iOS Build Environment 2.11
- Fixed a crash bug in the project creation wizard when multiple architectures are selected.
- Updated the MobileSubstrate sample for iOS 7.
2014-02-03       iOS Build Environment 2.10
- Upgraded the cctools binary utilities to version 845.
- 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.
2013-11-30       iOS Build Environment 2.9
- Fixed a bug in the project creation wizard concerning embedded provisioning profiles (reported by A. Seger).
- Disambiguated the instructions concerning the export of .p12 files from a Mac's Keychain.
2013-11-13       iOS Build Environment 2.8
- Dramatic improvement of the linker's speed and prevention of a buffer overflow (patch by Gerhard Seiler @ Sproing GmbH).
- 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).
2013-10-01       iOS Build Environment 2.7
- All the APIs of the IOS 7 SDK are supported.
- 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.
2013-05-09       iOS Build Environment 2.6
- Added a sample that shows how to build an Adobe Native Extension for Adobe AIR.
- 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.
2013-02-10       iOS Build Environment 2.5
- Support for all the APIs of the iOS 6.1 SDK.
- Added a console program sample.
- Added the crt_externs.h missing header (forgotten by Apple in the 6.1 SDK).
2013-01-18       iOS Build Environment 2.4
- Fixed a bug where the resources copy in the final IPA would fail on Windows XP.
- 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.
2012-12-12       iOS Build Environment 2.3
- IMPORTANT: Fixed a bug in ld64 responsible for the "ld: file too small for inferred architecture" error.
- Added instructions on how to link a dynamic library or a third-party framework to an iOS project.
2012-12-09       iOS Build Environment 2.2
- The installer uses now the Nullsoft Scriptable Install System (NSIS).
- This new installer handles the problem of corrupted or broken downloads.
- This new installer facilitates uninstalling the environment using the Windows control panel.
2012-11-10       iOS Build Environment 2.1
- Support for all the APIs of the iOS 6 SDK.
- 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.
2012-09-21       iOS Build Environment 2.0
- Got rid of the Cygwin compatibility layer.
- 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.
2012-06-01       iOS Build Environment 1.11
- Better Visual Studio integration for projects created with the Creation Wizard.
- 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.
2012-03-14       iOS Build Environment 1.10
- Updated the iOS Project Creation Wizard.
- 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.
2012-01-17       iOS Build Environment 1.9
- Updated the iOS Project Creation Wizard.
- 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.
2011-11-25       iOS Build Environment 1.8
- iOS 5 full support (compatible with the frameworks from the 5.0.1 SDK).
- 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.
2011-08-25       iOS Build Environment 1.7
- Added the C++ headers in the Makefiles by default (they had to be explicitly included beforehand).
2011-08-19       iOS Build Environment 1.6
- Added a drop-list to the Project Creation Wizard to explicitly enable iPad support in newly created apps.
- Fixed an ACL permissions problem that could cause the generation of invalid IPAs on some computers.
2011-05-22       iOS Build Environment 1.5
- Automatic creation of .deb packages (Cydia) from compiled projects.
- Added the /s command-line flag to the PNG normalizer (idea: Per Andersson).
- Extension of the default Makefile rules in the project creation wizard.
2011-05-16       iOS Build Environment 1.4
- Automatic creation of IPA packages (app bundles) from compiled projects.
- 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.
2011-05-10       iOS Build Environment 1.3
- Added support for Visual Studio 2008, 2010 and Visual C++ Express as IDE.
- 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.
2011-01-06       iOS Build Environment 1.2
- Complete refactoring of the headers tree (implying a substantial save in megabytes).
- 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.
2010-11-21       iOS Build Environment 1.1
- Changed the default install path to avoid write permission problems in Program Files.
- 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.
2010-11-15       iOS Build Environment 1.0
- Unpublished initial version (private use).

Random testimonials

"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.