2

我在几个版本中都没有弄乱我的 OSX 应用程序的框架引用,但由于某种原因,Apple 决定拒绝我的最新版本,因为我缺少引用。这是他们给我的唯一信息:

The app references frameworks which are missing. This may lead to unexpected bugs or undefined behavior. The missing frameworks are

'/Applications/MyApp.app/Contents/MacOS/MyApp' links against (missing, Relative): '@rpath/libavcodec.dylib'
'/Applications/MyApp.app/Contents/MacOS/MyApp' links against (missing, Relative): '@rpath/libavformat.dylib'
'/Applications/MyApp.app/Contents/MacOS/MyApp' links against (missing, Relative): '@rpath/libavutil.dylib'

这对我来说没有意义,因为我有一个用于将 .dylib 文件复制到Libraries子路径的构建阶段,并且我可以在 .dylib 下的应用程序包中看到 .dylib 文件/Contents/MacOS/Libraries

我的应用程序的运行时搜索路径设置为LD_RUNPATH_SEARCH_PATHS = @rpath @rpath/Libraries @loader_path/Libraries @executable_path/../Frameworks

SDK 框架设置为 10.8,我的部署目标是 10.6.8。

有任何想法吗?不幸的是,苹果不会给我任何额外的信息。

提前致谢!

4

1 回答 1

2

这是我从 Apple Developer Technical Support 得到的回复:

此错误是我们的审查工具在运行时解析 @rpath 相对安装路径的限制,特别是如果 dylib 安装到应用程序包的 /Contents/ 目录中未指定的子目录中。我们通常不会遇到这个问题,因为大多数开发人员将他们的 dylib 放入应用程序包的 /Contents/Framework 或直接放入 /Contents/MacOS/ 文件夹 - 或 - 将子目录指定为相对路径的一部分。

这些相对安装名称路径记录在:http: //developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/dyld.1.html

虽然我们建议开发人员使用 Frameworks 文件夹(通过 '@executable_path/../Frameworks/' 安装名称路径)作为 dylib,但您也可以使用 MacOS 文件夹(通过 '@executable_path/' 或 '@rpath/')安装名称路径)。

注意:如果您使用的 @rpath 包含“Libraries”子目录路径:“@rpath/Libraries/”,我们的审查工具会解决它。

解决方法是将 ffmpeg dylib 从Libraries文件夹中移出并移入Frameworks文件夹中。

于 2013-06-24T03:21:14.557 回答