from: http://phoboslab.org/log/2011/06/javascriptcore-project-files-for-ios
github: https://github.com/phoboslab/JavaScriptCore-iOS
Some weeks ago I released a compiled version of the JavaScriptCore library for iOS as part of my game engine. Since then I had many people asking for the project files necessary to build the library - and I promised to release them as well. But before I do so, let me just rant about Apple‘s politics real quick:
They suck.
You see, JavaScriptCore is an Open Source library. In fact the whole WebKit project is. It‘s licensed under BSD and LGPL licenses. The latter of which requires that if you modify the software you have to release your modified version – including the complete source – under the LGPL as well. Furthermore, itstates: "For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files,plus the scripts used to control compilation and installation of the library."
Yet the JavaScriptCore sources that you get from Apple‘s Open Source page come without a project file. So while you get the source code for the library, it‘s useless because you can‘t compile it.
Luckily you can also get the current JavaScriptCore sources directly from the SVN repository – and behold, they even come with an Xcode project file, ready to be build for MacOSX with the touch of a button. But – and here‘s the kicker – this project file curiously misses the iOS platform target. You can‘t build it for the iPhone or iPad.
Adding
this iOS target to the project file is by no means a trivial endeavor, mind you.
Especially not in Xcode. I ended up duplicating the MacOSX target, setting
the Base
SDK
to Latest
iOS
, changing the Supported
Platforms
to iphoneos
iphonesimulator
and poking around in the project file with a text
editor to change the productType
to library.static
,
because you‘re not allowed to build a framework
for
iOS.
After some more changes that I can‘t remember (I‘ll be sure to document this next time I do it), I was finally able to compile the library for iOS. I submitted my game Biolab Disaster to the App Store only to see that it was rejected the next day.
JavaScriptCore
utilizes the libicucore library to sort strings in a unicode fashion. Apparently
libicucore is a "private" API on iOS – which is curious because I can add this
library to my iOS project without any dirty hacks, I‘m just not allowed to use
any functions of it. So I compiled JavaScriptCore again, this time setting
theUCONFIG_NO_COLLATION
preprocessor
macro to disable unicode sorting.
Did I mention Apple‘s politics suck?
Update December 2nd 2012: an up-to-date version can be found on github. The old version and instructions follow.
Anyway,
here‘s the statically compiled libiOSJavaScriptCore.a
that
you can use in your iOS projects and the source and project file if you want to
build it yourself for whatever reason:
This all is based on the slightly outdated 534.27 version of JavaScriptCore, but at least this version seems to be AppStore compatible.
libstdc++.dylib
, libicucore.dylib
from
the list and the libiOSJavaScriptCore.a
from
"Add other..." like
soimport
<JavaScriptCore/JavaScriptCore.h>
build/Products/
directly
in your project directory or~/Library/Developer/Xcode/DerivedData/JavaScriptCore-xxx/Build/Products/
lipo
-create Production-iphoneos/libiOSJavaScriptCore.a
Production-iphonesimulator/libiOSJavaScriptCore.a -output
libiOSJavaScriptCore.a
Btw.: AppCelerator maintains their own version of JavaScriptCorethat they use in Titanium, but I have no idea how to build it. Any hints are greatly appreciated!
If you want to support me, please consider buying a license of my game engine. It also makes a great gift ;-)
[转]编译 JavaScriptCore For iOS,布布扣,bubuko.com
原文:http://www.cnblogs.com/Proteas/p/3573605.html