@eww和我繼續調查這一點,這裏就是我們能夠找到。當框架和應用程序正在編譯時,它們引用了R.framework的特定版本。我們可以通過運行到看到這一點:
otool -L /Applications/StatTag.app/Contents/Frameworks/RCocoa.framework/RCocoa
/Applications/StatTag.app/Contents/Frameworks/RCocoa.framework/RCocoa:
@rpath/RCocoa.framework/Versions/A/RCocoa (compatibility version 1.0.0, current version 1.0.0)
**/Library/Frameworks/R.framework/Versions/3.3/Resources/lib/libR.dylib (compatibility version 3.3.0, current version 3.3.2)**
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1252.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1253.0.0)
經過一番搜索,this post來到了這避讓我們在如何改變R.framework提及是「當前」,而不是特定版本
install_name_tool -change /Library/Frameworks/R.framework/Versions/3.3/Resources/lib/libR.dylib /Library/Frameworks/R.framework/Versions/Current/Resources/lib/libR.dylib /Applications/StatTag.app/Contents/Frameworks/RCocoa.framework/RCocoa
現在,我們可以看到它引用當前版本的文件夾:
otool -L /Applications/StatTag.app/Contents/Frameworks/RCocoa.framework/RCocoa
/Applications/StatTag.app/Contents/Frameworks/RCocoa.framework/RCocoa:
@rpath/RCocoa.framework/Versions/A/RCocoa (compatibility version 1.0.0, current version 1.0.0)
/Library/Frameworks/R.framework/Versions/Current/Resources/lib/libR.dylib (compatibility version 3.3.0, current version 3.3.2)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1252.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1253.0.0)
什麼絆倒了我們多一點是,當這個被內置到我們的最終應用,T以下是引用RCocoa和R的其他本地框架,這意味着我們必須多次運行install_name_tool。樂於報道的事情現在正在起作用。