Now you can.
Use your favourite IDE to code in Objective-C, C++, C or ARM assembly, like in XCode. ARC and blocks are supported.
You produce real apps, like with XCode (they are not "web apps"), deployable on any iPhone, iPod or iPad (jailbroken or not).
+ Sign and deploy your apps using your iOS Developer Program ID, like with Xcode.
+ Professionals: integrate this compiler, linker, code signer and binary tools easily in your production toolchain!
+ Professionals: get the toolchain source code and stay up to date by signing up for SVN access (contact me).
+ Remote debug console: error messages now display live on your PC.
+ Compile your iPhone apps directly inside Visual Studio (Visual C++ Express is also supported).
+ Generate automatically .deb packages (Cydia) and .ipa (iTunes). Sync with iTunes.
+ Includes 20 examples, among which a well-known 3D game with OpenGL rendering, spatialized audio, 3D models, accelerometer-based movement and fully commented source code.
Download a free evaluation version:
The free version enables you to test the software. Apps created with this version
can only be run once. Code signature is only possible with the full version.
How to get the full version ?
The build environnement comprises:
+ a native assembly/C/C++/Objective-C iOS cross-compiler (clang/llvm version 3.4) targeting armv7 and armv7s. Apple A7 (iPhone 5S) is supported in 32-bit mode.
+ an iOS linker (Apple ld64 version 136) that can create Mach-O executables for iOS and OS X
+ the XCode binary development tools for iOS and OS X (Apple cctools version 845)
+ an improved code signature tool
+ an interactive debugger for iOS (Apple's branch of GDB version 1822)
+ a Visual Studio project creation wizard and Makefile creator + a certificate and private key management tool for code signing
+ a Unity project builder + a remote debug console
+ an automatic .plist file converter
+ a PNG file normalizer
As well as 20 examples, including source code and Makefile, compilable out of the box.
In order to download the software, a fixed contribution of €30 (ar. $40 USD) is requested. You will receive an e-mail containing the download link immediately after.
If you have no PayPal account, just click on the Continue link at the bottom left of the PayPal page, above the bank card logos.
If you have no credit card, you may do a bank transfer. Send me an e-mail and I will give you my bank information code. As soon as I receive your contribution I will send you the software.
If you don't receive the download link by e-mail, please click here to get a direct link.
If there was the slightest problem just e-mail me and provide your name, and the date of your contribution. I will help you solve it right away.
If you already have a full version and a newer one is available, you are entitled for a free update. Please enter the email address you gave to PayPal below, choose your version, and click the Update button.
NOTE: to prevent abuses, you are entitled to one update per month using this form. If you require an exception, please contact me directly by e-mail.
If there was the slightest problem just e-mail me and provide your name, and the date of your contribution. I will help you solve it right away.
The following samples provided with this build environment are available for free (all of them include fully commented source code & Makefile):
All these examples now come with a Visual Studio project file (*.vcproj).
AdobeNativeExtensionDemo - Shows how to create a native Adobe AIR extension that enables the user to interact with the device's audio volume.
AVMeter - A nice MP3 player with a vu-meter. Shows how to retrieve noise analysis informations from an AVAudioPlayer object and display them in a custom UIView control.
CamTest - This sample shows how to acquire, process and display a video stream from the device's cameras, using the AVFoundation framework.
ConsoleHello - A simple Hello World in console mode.
CoverFlow - A scrollable music album cover flow control example. Subclassed from UIScrollView, these effects use the CoreAnimation framework.
DatePicker - Displays a date picker control where a date can be selected between two limits and shows how to retrieve its content.
FlipDemo - A sample that allows to flip the pages of a book, showing how to switch from one view to another in an application. Uses the CoreAnimation framework.
HelloWorld - The most basic iPhone application there is. Displays "Hello iPhone world!" in a UIKit window.
GLCube - A simple 3D cube that you can rotate with your fingers. Demonstrates the use of the OpenGL/ES framework and the touch screen capabilities.
GPSSample - Displays your location data on screen. Demonstrates the use of the CoreLocation framework and the GPS system.
MobileSubstrateDemo - A SpringBoard code injection example. Hooks into SpringBoard to display an alert box when an app is launched.
MoviePlayer - This sample plays in streaming a video from the Apple website. Shows how to implement a basic multimedia player.
NavBarDemo - A simple text area with a nav bar on top of it. Shows how to implement a navigation bar in an iOS app.
PreferenceLoaderDemo - A system-wide Preferences bundle. Demonstrates how to create a system-wide Preferences bundle that can be integrated in the system's Settings app.
RotationDemo - Displays a phrase on screen that changes when the device is tilted on its side. Demonstrates the support for device orientation detection in a iOS app.
SBSettingsToggle - A simple toggle switch for SBSettings. Demonstrates how to build a SBSettings toggle library in C.
StaticLibraryDemo - Shows how to create a reusable static library with some functions in C and others in Objective-C.
TableDemo - Displays all files in the default app folder in an editable table view with sections, similar to the contacts list. Shows how to implement an UITableView control.
WifiScanner - Almost a full-featured app, this example demonstrates how to call functions from an external dynamic library, how to navigate through a UINavigationController's different views, how to present data in tables in different view styles, and how to use a gesture recognizer to make a UILabel clickable and make Safari open a specific URL.
The following tools provided with this build environment are also available for free:
iOS PNG normalizer - A convenient drag-n-drop tool to convert Apple's non-standard PNG images back to standard, PC-readable images.
Click to expand:
- 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+.
- Fixed a crash bug in the project creation wizard when multiple architectures are selected.
- Updated the MobileSubstrate sample for iOS 7.
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Added the C++ headers in the Makefiles by default (they had to be explicitly included beforehand).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Unpublished initial version (private use).
Click to expand:
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, undistinctively 32 or 64 bits. All the Visual Studio versions from version 2008 are supported, which means Visual Studio 2008, Visual Studio 2010 and Visual Studio 2012, including Visual C++ Express which is free.
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 becames obvious that only the languages that Apple supports may be used. This does not include Visual Basic.
If you signed your app with a digital signing identity and included a provisioning profile in it, then your device doesn't need to be jailbroken. Simply double-click on the .ipa file, then sync with iTunes. Your app icon appears.
For non-signed and/or non-standard apps, your device needs to be jailbroken. You may then install your app with iTunes, with Cydia, or manually over SSH. Please refer to the "Read me first" file for more detailed instructions.
Unfortunately, creating a third-party iOS emulator is forbidden by Apple Inc. But testing may be done on the iPhone itself.
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.
If you wish to develop non-standard apps, or use the debugger directly on your device, you will need to jailbreak it, which means to lift certain restrictions imposed by Apple Inc. on their consumer devices, which are incompatible with development and 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 particular technical skills are required.
To send your app to Cydia, it only 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.
Your app's submission must imperatively be done using the Application Loader tool on Mac. Meanwhile, all the process of developing and testing your app may take place within Windows, especially if it's the work environment with which you're the most familiar (tip: one can note that OS X works well enough in a virtual machine to use Application Loader this way).
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.
Indeed. This is the first iOS application I developed. It enables me to have my iPhone permanently in Windows' Network Neighbourhood, so that I can transfer files easily. I can then use it as a storage server, and I have access to the complete filesystem. This app is available now on Cydia under the name PC Networking :)
There seems to be a lot of concern about this. So, I decided to give a more complete answer here on why, to my knowledge, it doesn't.
Before, when a programmer wanted to create apps for his iPhone, iPod or iPad, he was also required to buy a $1500 worth Mac. This was even more aberrant since all programmers obviously already have a computer. Being not disposed myself to buy that an expensive and redundant hardware in order to do exactly the same thing that I was doing everyday on my Windows computer (I am an independent programmer), I ported to Windows all the necessary Apple tools to build your iOS apps, creating the missing parts myself, such as the Darwin compatibility layer and the code signing tool.
I am an independent IT professionnal and an experienced programmer. If you think your company could hire me, feel free to make an offer. Here is my resume.
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, get in touch with me so we can discuss the terms.
This project already benefited from the following sponsors:
Their upcoming MobileFX Studio 7 IDE will use iOS Build Environment!
Specialized in the creation of gaming and multimedia content
"Austria's leading game development studio!"
Test automation tools for mobile platforms
"Test automation tool for iOS, Android, Blackberry and WindowsPhone"
"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 with the new framework folders, everything went well and the compilation ended successfully which enabled me to try my audio player project in real conditions."
"Thanks for these additions which give alot more possibilities to your potential users. The idea of a universal makefile is awesome, it removes the need to add the frameworks one after the other."
"Your build environment turns out to be really interesting. Kudos!" -- Louis A.
"Installed and working perfectly on my iphone 4. 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 with execution privilege on iOS 5, ran perfectly. Really great job." -- Nima P.
If you intend to write a review about this software, please tell me about it, so that I can add the link and your website logo here.