在PreferenceBundle等插件中使用Swift和OBJC混编

原文链接:http://blog.0xbbc.com/2014/11/swift-and-objective-c-tweak-supporting/

这种混编的方式,是只适用于PreferneceBundle,还是也适用于一般的App?

Command line tool不需要,不过用Swift写ctl的话,体积大得惊人,应该是直接把dylib嵌入进去了。(亲测)
Logos Hook可以(亲测,非嵌入方式)
PreferenceBundle可以(亲测,非嵌入方式)
Captain Hook应该和Logos类似(未测试,应为非嵌入方式)
CCLoader也应该没问题(未测试,应为非嵌入方式)

不过都要在Build Phases里面link上CoreGraphics.framework才行, Swift的某个绘图相关的dylib需要CG。

补充一下:
ctl内嵌就不说了。
PreferenceBundle和CCLoader的不link的话,运行会CRASH
Captain Hook和Logos Hook不进行link的话,不会crash,当然也不会加载,但是你可以在log中看到类似下面的错误:

Nov 23 22:54:43 0xBBC-iPod-touch vsassetd[4697] : MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/swift-mix-objc-logos.dylib
Nov 23 22:54:43 0xBBC-iPod-touch vsassetd[4697] : MS:Error: dlopen(/Library/MobileSubstrate/DynamicLibraries/swift-mix-objc-logos.dylib, 9): Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /Library/MobileSubstrate/DynamicLibraries/swift-mix-objc-logos.dylib
Reason: image not found

如果手动拷贝过去,但是权限不正确的话(正确的权限应该是0755),错误如下:
Library not loaded: @rpath/libswiftDarwin.dylib
Referenced from: /Library/MobileSubstrate/DynamicLibraries/swift-mix-objc-logos.dylib
Reason: no suitable image found. Did find:
/Library/MobileSubstrate/DynamicLibraries/Frameworks/libswiftDarwin.dylib: stat() failed with errno=13

(13即Permission Denied)