10、关于第三方库找不到文件的提示错误。简单补充下吧,别走弯路。
首先你要确定这个错误产生的原因:大致分两种,
一:你做的项目缺失文件,百度下,加入就解决了;
二:你引入的第三方框架发生找不到文件错误:这样的结果分两种:
二、一:开发第三方框架的程序人员没有做好自己的框架。尤其是在生成框架的时候,没有设置好自身属性。导致使用者用的时候出现找不到文件错误,最后迫使使用者不得不去改自己的工程配置。
二、二:你在引入第三方框架的时候,少引用了文件。
好了,你分析完后就好办了,我们做的这个静态库没有设置自己的兼容属性,所以就照成了这种错误。在iPad Retina的模拟器上跑就正常,换成其他的模拟设备就报错。所以改下其属性就能解决。
Target: -> Build Settings -> Architectures -> Build Active Architecture Only 全改成NO;
《插不了图片了。楼下8楼找吧》
分析原因:
在我们生成静态库的时候,我们选择的是iPad Retina。也就是说这个静态库在引用的时候,必须也是iPad Retina。否则Xcode编译器会找不到文件所在。
大家可以实验下,在iPad Retina下导出静态库,在其他工程使用的时候,如果用iPad Retina跑就没有错误。如果选择其他设备就会提示找不到文件。
兼容全部设备解决方法:改下静态库的兼容属性。Target: -> Build Settings -> Architectures -> Build Active Architecture Only 全改成NO;
Build Active Architecture Only
这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本,所以会报错编译不到文件,出错("_OBJC_CLASS_$_xxxxxx", referenced from:)
而设置为no时,会编译所有的版本,这样就解决编译出错的问题了。
这个是设备对应的architecture:
armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
arm64:iPhone5s
编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。
真机版和模拟器版的库合并解决方法:在framework文件夹下,你会看到一个白板文件,这个文件名和的的framework静态库名相同,只是没有后缀名。 这个文件在被引入到其他工程时候是看不见的。只有在Show In Finder下能看到。
打开终端,输入命令:中文换成你的真实目录。
lipo -create “……真机/目录/那个白板文件“ "……/模拟器/目录/那个白板文件" -output “…..另保存的/目录/文件”
合并好的新文件,覆盖掉原来的framework中的文件即可。这个framework就会支持所有设备和真机、模拟器全部版本。
其实这个方法就是用*.a文件的合并方法。在framework一样有效。framework中的白板文件就好像*.a文件一样。
9、关于xib的引用。同样根上边创建framework的方法一样,只是设置不同。我加了一个名字为:Resource.bundle静态资源文件。
这个样子:
Target:并选择 Build Settings -> Architectures -> Base SDK 改为Latest iOS(ios 8.1)
Target:在 Deployment 下,
Target:将 “Mac OS X Deployment Target”改为”Compiler Default”,
Target:将 “Targeted Device Family”改”iPhone/iPad”,
Target:将 “iOS Deployment Target”,改为 “iOS 7.0”:
9.1、在MyViewController.m文件中编写下。别忘了在*.h里写上接口。
9.2、然后就是给新加的资源文件拖拽下。
再选中工程文件,拖拽后的样子(就是转静态库的工程)。
为了方便查看,我把MyViewController.xib背景涂成了蓝色,加了个红按钮。直接:command+R。一切运行正常。
9.3、然后把这两个文件都复制出来。
放到其他工程里,运行。是不是很简单。
10、加个图片。怎么加不解释来。先加一个不用管理器管理的图片。
工程command+R。。一切正常。
10.1、其他工程引用静态库,再跑。正常。嘿嘿,是不是多了个图片文件。