Reactivecocoa: Apple 拒绝构建,因为它链接到 MapKit 而没有使用它

创建于 2017-09-24  ·  5评论  ·  资料来源: ReactiveCocoa/ReactiveCocoa

您的应用程序链接到 MapKit 框架,但似乎不包含地图功能。 如果您的应用确实包含地图功能,请在解决中心回复此消息,并提供如何在您的应用中找到它的步骤。

如果您不打算使用 Maps,请取消与 MapKit 框架的链接。 如果您想使用地图,请添加“com.apple.developer.maps”权利并提交更新的二进制文件以供审核。

如果您使用的是与 MapKit 框架链接的第三方框架,您可能需要联系第三方框架提供商以获取有关取消链接的帮助。

结果是幸运的框架是带有 MapKit 扩展的 ReactiveCocoa,自 2016 年以来可用......☹️

otool -L ReactiveCocoa.framework/ReactiveCocoa; 
ReactiveCocoa.framework/ReactiveCocoa:
    @rpath/ReactiveCocoa.framework/ReactiveCocoa (compatibility version 1.0.0, current version 1.0.0)
    @rpath/ReactiveSwift.framework/ReactiveSwift (compatibility version 1.0.0, current version 1.0.0)
    @rpath/Result.framework/Versions/A/Result (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1349.63.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 1238.50.2)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1504.82.104)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.64.0)
    @rpath/libswiftAppKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftCore.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftCoreData.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftCoreGraphics.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftCoreImage.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftCoreLocation.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftDarwin.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftDispatch.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftFoundation.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftIOKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftMapKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftQuartzCore.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftXPC.dylib (compatibility version 1.0.0, current version 802.0.53)

出于某种原因,这个问题以前没有被标记。 我解释了情况并等待响应,但这似乎是一个合法的案例 - 该应用程序不需要 MapKit 并且不需要用户实际需要此功能的权利。 有什么简单的解决方法吗?

最有用的评论

关于解决方案,将 MapKit 分离为 ReactiveMapKit 绝对是一个巧妙的方法。

我想我们会走这条路。 可能是 CocoaPods 用户的子规格。

所有5条评论

有什么简单的解决方法吗?

您可以在没有 MapKit 绑定的情况下构建 RAC,所有这些都包含在MKMapView.swift AFAICR 中。 我们没有其他与 MapKit 相关联的构建设置或位置。

如果您使用 CocoaPods,您可以克隆 podspec 以排除所述文件,同时仍指向此 repo。

显然,如果 Apple 收紧规则,我们将不得不单独提供这些绑定。 考虑到 Swift 模块导入的工作方式,我们无法在没有新框架目标或子规范的情况下解决它。

是的, MKMapView.swift似乎是这种依赖的根源。 这当然是一种解决方法,但每次使用 Carthage 更新依赖项时都需要这样做,这将问题提升到全新的水平。 无论如何,我会看看苹果审查团队对这种情况的看法。

关于解决方案,将 MapKit 分离为 ReactiveMapKit 绝对是一个巧妙的方法。 或者,我们可以使用从环境中提取的MAPKIT编译器标志并将整个扩展包装在条件编译语句中。 刚刚在 Carthage 上尝试了这个并且它奏效了,但是这样的美学引发了问题:

ianbytchek<strong i="9">@ibmbp</strong>:dependency$ carthage build reactivecocoa --platform mac
ianbytchek<strong i="10">@ibmbp</strong>:Mac$ otool -L ReactiveCocoa.framework/ReactiveCocoa 
ReactiveCocoa.framework/ReactiveCocoa:
    …
    @rpath/libswiftIOKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 802.0.53)
    …
ianbytchek<strong i="11">@ibmbp</strong>:dependency$ RC_SWIFT_FLAGS="-DMAPKIT" carthage build reactivecocoa --platform mac
ianbytchek<strong i="12">@ibmbp</strong>:Mac$ otool -L ReactiveCocoa.framework/ReactiveCocoa 
ReactiveCocoa.framework/ReactiveCocoa:
    …
    @rpath/libswiftIOKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftMapKit.dylib (compatibility version 1.0.0, current version 802.0.53)
    @rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 802.0.53)
    …

关于解决方案,将 MapKit 分离为 ReactiveMapKit 绝对是一个巧妙的方法。

我想我们会走这条路。 可能是 CocoaPods 用户的子规格。

在未来的更新中解决此问题是合适的,但是,我们现在将继续您的审查。

苹果饶了我,但说下次惩罚是不可避免的。

很高兴知道。 将尽快推动这一进程。

此页面是否有帮助?
0 / 5 - 0 等级