㈠ xcode 怎么把虚拟文件夹转成实际路径
默认情况下。是有生成,可能你不知道在哪里。
Xcode-->perferences--> locations
Derived Data,下面有一个路径:
/Users/Liam/Library/Developer/Xcode/DerivedData
这个就是默认的生成路径。点击旁边的箭头就可跳转到该文件夹。这里不值程序的目标文件,还有其他的生成的文件。
如果你想在项目中也生成一份,那么就点击Advanced按钮。将Build Location,选择“locations specified by targets”就可以了。
这时你在Build,那么项目路径下就会产生Build目录。
targets -> build phases -> link binary with Libraries
Build Settings里面设定Library Search Paths为那个静态库的存储路径,不然不会读取。
object-c调用C++编写的静态库时,首先要在build setting中C++ Standard Library 选项中选择libstdc++,其次就是调用C++接口的.m文件要改为.mm(就是 修改文件名后缀为.mm)。
很多情况下,我们从网上得到的是一个纯C的代码包,他们这些库,往往是各种平台通用,代码包svn checkout出来后,里面有makefile , vcproject file,等等。
往往我们先README看过之后,通过./configure make make install ,
来实现编译生成了一个库。(注意一些基本语法 ./confiure后如果带 --prefix=/path/to/your/custom/dir 表明自定义安装路径 ,这个很有用,有些人默认安装后,找不到*.a库的路径,急死了。嘿嘿。)
那么在这样的情况下,我们第一个首先会遇到的问题,就是这个库格式不兼容。
我们添加了这个库到project后编译时,显示this file format doesn't support (i386)。
这个情况,是由于大部分snow leopard是INTEL DUO CPU,双核x86_64的,一般很多库,不加特别标注,都以为你开发了为MAC电脑开发程序,所以库都默认为x86_64位的静态库。如果你好奇,可以new一个MAC开发程序的project,试着看看那个库能不能正常编译,没有warning就知道了。
当然,还有一个命令行来检测你编译的库,可以使用在什么平台架构下。
方法如下: : lipo -info /path/to/your/library.a
即可看到此库位i386, x86_64, arm等等。
明白了上面的问题的产生原因,我们就好办了。 一般解决办法是这样的,在./configure 之后加一点参数,比如 CFLAG="-arch i386" 。GCC的path设定到SDK path以下的/usr/lib/gcc/i686 or arm下。注意,SDK PATH,有两种,iphoneOs 和iphoneSimulator.有很大的区别!!
好了。以上是第一个问题。随后,你编译成功,lipo检测版本也OK后,你可以*.a 静态库文件到Project了。记得选中复制到项目。
再一个问题,也就是第二大问题,就是如何导入头文件。
由于很多是C的代码,headers通常是这样使用的 #include <fuck.h> 。如果我们这样使用,xcode直接报错,提示找不到这样的头文件。
那我们该怎么办呢?我找了网上所有的文章,都一带而过。于是我很愚蠢的选择把头文件拷贝过来。然后一个个的改include 为import ,把< >语法,改为” “。并且,木有一个高手愿意说!我恨啊!!!
其实可以使用这样的办法,就是在右击你的project 名,选择Get Info . 在build选项卡中,有search hearder path 选项。是让你告诉xcode去哪儿搜搜头文件。
记住,这里如果你的库的安装路径是/usr/AAA的话,那AAA下肯定有include , lib两大文件夹。 那你在选项中,请直接填/usr/AAA,不需要多此一举选择到include文件夹中,苹果会自动替你搜索进去。
这里有一个小细节,如果这样编译出错的话,请不要选中recursive ,否则可能导致头文件重复引用,导致error: expected '=', ',', ';', 'asm' or '__attribute__' before 这样的错误。
㈡ xcode 7 的旧sdk在哪个路径
首先得有老版本的sdk,如果你已经安装了Xcode5.0,那么老版本的sdk iPhoneOS6.1.sdk已经被删除了,你可以从同事电脑里拷贝一份,路径是:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs,我从同事电脑考了一份,汗,又编译出错,找不到头文件,只好重写下载Xcode4.6.3,打开dmg镜像文件,从路径/Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer拷贝iPhoneOS6.1.sdk到路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs目录即可 附iPhoneOS6.1.sdk下载链接:iPhoneOS6.1.sdk 提示 对于还没有安装Xcode5.0的童鞋,在安装之前最好备份一下iPhoneOS6.1.sdk目录,在安装Xcode5.0之后拷贝到相关目录/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs即可以使用sdk6.1了,在项目中设置
㈢ 如何在高版本的Xcode中部署低版本的ios程序
方法如下:
打开老的Xcode安装路径(你可以去 Apple Dev Center 下载老版本的Xcode dmg包,解压出来对应的SDK包。):Applications/Xcode.app/Contents/Developer/Platforms /iPhoneOS.platform/Developer/SDKs .这个路径中安装了你当前Xcode的所有Base SDK(例如 “iPhoneOS6.1.sdk”),同样的你只需将这个sdk 备份一份拷贝到新的xcode相同目录下即可。
安装完新版Xcode 5后同样将备份的sdk拷到对应路径: Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs下即可。
重启你的Xcode,打开Project Targets -> Build Settings -> Base SDK,设置为对应的sdk即可(例如ios6)
这时候你可能会发现运行起来的模拟器还是ios7的,要想模拟器是ios6的,同样的只需要到路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs下将对应的simulator备份的新得xcode路径下即可。