博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Linux上编译iOS程序
阅读量:6083 次
发布时间:2019-06-20

本文共 2572 字,大约阅读时间需要 8 分钟。

phpwind appcreator是向站长提供的自助app生成平台,目前只支持Android,为了支持iOS,搜了一些相关资料,发现可以在Linux上来编译iOS程序,但最后的签名什么的还没细究。

主要用到了一些cjacker移植的工具链(应该是基于苹果公司开源的一些代码),以及他开发的iphonesdk-utils(主要是一些辅助工具,比如ios-clang,会探测iPhone SDK,并自动加上一些参数来调用clang,避免自己手写很多参数,比如 --target 等)。

介绍下具体步骤:

  • 首先需要安装一些基础库和工具,主要是uuid、icu、sqlite3、flex、bison。一般这些通过系统的包管理工具安装就行了。uuid等那几个库需要开发相关的文件,也就是一些头文件和动态链接库,这个在一般的Linux发行版中是拆开的,至于名字则和具体发行版有关,比如openSUSE中uuid的开发包就是libuuid-devel
  • 安装llvm和clang,版本需要>=3.7.0。较低版本的clang,发现无法正确找到交叉编译需要的ld,总是调用了系统中binutils提供的/usr/bin/ld。按照的提示,我们只要下载llvm和clang就行了,其他用不到。先安装llvm,再安装clang,建议在cmake时将CMAKE_INSTALL_PREFIX指向单独的目录位置,避免和系统默认的冲突,比如可以指向HOME/local,这里的HOME指的是用户主目录,然后将HOME/local/bin添加到PATH开头的位置就行了。llvm编译产生的中间文件居然有8.8G这么大。。
  • 下载cctools:
svn co http://ios-toolchain-based-on-clang-for-linux.googlecode.com/svn/trunk/cctools-porting

需要改一下里面的其中一个文件内容:

sed -i 's/proz -k=20  --no-curses/wget/g' cctools-ld64.sh

其实就是把下载工具proz替换为wget。

除此之外,还需要把/usr/include/unistd.h这个文件中其中一个函数参数的__block改掉,因为后面要用clang编译cctools,__block被clang保留使用了,可以改成__libc_block

然后是导出两个环境变量:

export CFLAGS="-IHOME/local/include/llvm-c" && export CXXFLAGS="-IHOME/local/include/llvm-c"

这里的HOME要替换成你编译llvm时指定的前缀。

然后就是configure和编译了。

CC=clang CXX=clang++ ./configure --prefix=HOME/local/ --target=arm-apple-darwin11make && make install
  • 下载

这个编译比较简单:

CC=clang CXX=clang++ ./configure --prefix=HOME/local/make && make install
  • 从其他mac机器上拷一个iPhone SDK过来,放到/usr/share下面,SDK的路径一般是/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/目录下面,比如这下面的iPhoneOS8.4.sdk。 或者可以下载,当然下载的不知道是否安全。。
  • 接下来就可以编译iOS程序了,比如一个简单的:
#import 
#import
@interface MyDelegate : UIResponder< UIApplicationDelegate >@end@implementation MyDelegate- ( BOOL ) application: ( UIApplication * ) application didFinishLaunchingWithOptions: ( NSDictionary * ) launchOptions { UIWindow *window = [ [ [ UIWindow alloc ] initWithFrame: [ [ UIScreen mainScreen ] bounds ] ] autorelease ]; window.backgroundColor = [ UIColor whiteColor ]; UILabel *label = [ [ UILabel alloc ] init ]; label.text = @"Hello, World!"; label.center = CGPointMake( 100, 100 ); [ label sizeToFit ]; [ window addSubview: label ]; [ window makeKeyAndVisible ]; [ label release ]; return YES;}@endint main( int argc, char *argv[ ] ){ UIApplicationMain( argc, argv, nil, NSStringFromClass( [ MyDelegate class ] ) );}

保存为window.m,编译只要运行:

ios-clang -framework Foundation -framework UIKit window.m -o window

就行了。

这是通过llvm看到的该程序的信息:

screen27

此外还提供了ios-createProject用于创建一个项目,只要运行make就能编译了。ios-xcbuild用于转换xcodeproj为makefile,或者直接基于xcodeproj进行构建。

参考:

[1]

转载地址:http://zluwa.baihongyu.com/

你可能感兴趣的文章
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>