iOS .tdb代替.dylib

原文链接:http://www.meniny.cn/2015/09/22/00-00-01-iOS_Xcode_7_tbd/

不少升级 Xcode 7 的小伙伴们都表示在引入动态库时惊呆了,因为熟悉的 .dylib 不见了,取而代之的是 .tbd

.dylib 去哪了

事实上 .dylib 还在原来的位置,而且我们也可以通过解析 .tbd 来找到他们,要使用原来的.dylib 文件可以这样做:

  • 选择 Target
  • 选择 BuildPhases
  • 展开 Link Binary With Libraries
  • 点击 +
  • 点击 Add other
  • 按下 ? + ? + G
  • 输入 /usr/lib/

.tbd 是什么

经过苦苦的搜索之后,还是没有(!!!)任何有价值的文献,只在苹果开发者论坛中有一段来自苹果官方的回答:

For those who are curious, the .tbd files are new “text-based stub libraries”, that provide a much more compact version of the stub libraries for use in the SDK, and help to significantly reduce its download size.

简单说, .tbd 又是和苹果压缩 iOS 系统和应用体积的政策的产物。

.tbd 出错了

如果你在使用 .tbd 时出现类似这样的的错误:

warning: skipping file ‘/Users/me/xcode7/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/usr/lib/libz.tbd’ (unexpected file type ‘text’ in Frameworks & Libraries build phase)”

请参考下面的解决办法:

To work around this issue for now, please:

  • Delete all references to .tbd files from either your linked libraries phase, or from the copied bundle resources phase (where they sometimes will be added).
  • Add the library you want to link manually to the “Other Linker Flags” build settings, by adding the argument: -l<library_name> for each library you want to link (for example, add “-lsqlite3” (without quotes)).

也就是说:

  • 删除所有 .tbd 引用,不论 Link Binary With Libraries 还是 Copy Bundle Resources
  • 在 Build Settings => Other Linker Flags 中手动将每一个你要导入的库以 -l<library_name> 的形式添加,例如你要导入 sqlite3 则添加 -lsqlite3
时间: 2024-07-29 15:46:29

iOS .tdb代替.dylib的相关文章

Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)

最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass.在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemonkey上的示例.在它官方论坛找到一个用于OSX的Demo,通过分析和测试,研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法. 下面以在Delphi XE10上使用bass的静态库libbass.a为例. 1.获取要使用的静态库libbass.a文件,将libbass.a文件放

论网络游戏安全之外挂

从游戏的共性来说,网络游戏的本质就是客户端与服务端的数据通信,攻击的对象就是一系列的数据,游戏安装生成的客户端数据(可执行文件,动态链接库,存档文件,资源文件),游戏运行时在进程中的数据.界面数据.时钟数据,游戏通信时从网络接口流出的数据.爱 加 密 小编整理:论网络游戏安全之外挂 游戏的攻击手段(外挂)总的来说为以下几种: 1.自动化游戏 端游和页游中广泛存在,例如精灵对战类游戏的自动打怪外挂,手游暂未出现该类型外挂. 2.内存修改 端游.页游,手游都存在,对端游和页游在单机和弱联网时代比较流

跨平台:GN实践详解(ninja, 编译, windows/mac/android实战)

跨平台:GN实践详解(ninja, 编译, windows/mac/android实战)展开目录一.概览二.跨平台代码编辑器三.GN入门四.示范工程五.关键细节六.结语 [编译器选项] 其中前两部分是前缀部分,原本没有跨平台构建经验和知识的同学可以借助来帮助理解,后四部分则是讲述GN工程的基本结构.如何搭建一个GN构建的工程.以及关键的一些GN知识 一.概览如何开始这个话题是我比较在意的,因为对于部分人而言,真正从思维和理解上切入这篇文章真正要阐述的点是有困难的.这在于跨平台编译和开发这块,如果

IOS Exception 1(libc++abi.dylib: terminating with uncaught exception of type NSException)

2014-08-05 22:18:46.455 SwiftUI[1329:40871] -[_TtC7SwiftUI14MViewControler clickMe]: unrecognized selector sent to instance 0x10ea15dc0 2014-08-05 22:18:46.458 SwiftUI[1329:40871] *** Terminating app due to uncaught exception 'NSInvalidArgumentExcept

Xcode4.6创建和使用iOS的dylib动态库(转载)

此为xcode4的方法,xcode3的方法请查看 Xcode3创建和使用iOS的dylib动态库 找到两个目录,最好用两个finder窗口分别打开: 目录一: [plain] view plaincopy /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/ 目录二: [plain] view plaincopy /Applica

Delphi XE Seattle update1 在iOS 9.3模拟器调试程序时出现dlopen(libmidas.dylib,1):image not found错误的解决

发布时发布libmidas.dylib,但要注意真机和模拟器对应的libmidas.dylib不一样,发布错了会出现libmidas.dylib: mach-o, but not built for iOS simulator错误,模拟器要选E:\Program Files (x86)\Embarcadero\Studio\17.0\Redist\iossimulator\libmidas.dylib,真机要选E:\Program Files (x86)\Embarcadero\Studio\1

解决iOS的libc++abi.dylib: handler threw exception问题

今天遇到了libc++abi.dylib: handler threw exception的问题,不过在真机上运行一切正常!一开始没有想到是由于模拟器对xib文件的编译缓存,需要把模拟器中的App删除,同时把代码clean一次,再编译运行,终于一切正常了. 问题的根本原因是由于之前xib中有个控件的连接对象有问题,后来修改了,但编译器没有识别出来,总是不对新xib进行处理,导致模拟器总是报错! 以后遇到奇怪的问题,可以使用此法先确定不是环境的问题,再着手在代码中查找吧! 解决iOS的libc++

IOS 使用动态库(dylib)和动态加载framework

在iphone上使用动态库的多为dylib文件,这些文件使用标准的dlopen方式来使用是可以的.那相同的在使用framework文件也可以当做动态库的方式来动态加载,这样就可以比较自由的使用apple私有的framework了. dlopen是打开库文件 dlsym是获取函数地址 dlclose是关闭. 当然,要使用这种方式也是有明显缺陷的,那就是你要知道函数名和参数,否则无法继续. 私有库的头文件可以使用class dump的方式导出来,这个详细的就需要google了. 下面是两个使用的例子

在iOS 11上出现libsystem_kernel.dylib`__abort_with_payload崩溃问题的解决

crash日志内容 libsystem_kernel.dylib`__abort_with_payload: 0x11286b0a0 <+0>:  movl   $0x2000209, %eax          ; imm = 0x2000209 0x11286b0a5 <+5>:  movq   %rcx, %r10 0x11286b0a8 <+8>:  syscall ->  0x11286b0aa <+10>: jae    0x11286b0