相关疑难解决方法(0)

如何在Swift框架中导入私有框架头文件?

我有一个Objective-C框架(框架A),它公开了一些公共和一些私有头文件.公共标题也在框架的标题中声明.我有第二个与Objective-C框架链接的Swift框架(框架B).

现在,如果我想在BI中导入A的公共头文件,只需要做一个import A.

但是,如何导入私有标头?

我知道桥接头不是一个选项,因为框架不支持.我是否需要以某种方式为私有标头创建单独的伞形头?

objective-c clang ios swift

20
推荐指数
3
解决办法
1万
查看次数

如何使Swift框架子模块真的私有?

我发现了另一个问题,它带来了有关问题和可能解决方案的更多细节.似乎有一个已知的bug是未来改进的主题.

基于iOS Swift的动态框架中的Objective C类

我正在Swift中开发一个框架,我在框架中使用了一些Objective-C代码.到目前为止,我的模块映射如下所示:

framework module MyModule {
    umbrella header "MyModule-umbrella.h"

    export *

    explicit module Private {
        header "MyTools.h"
    }
}
Run Code Online (Sandbox Code Playgroud)

我担心的是所有的API MyTools.h都是从框架外部看到的:例如,如果你使用Cocoapods安装框架,那么你import MyModule进入你的应用程序(而不是MyModule.Private),你就能够访问MyTools.h哪些不可取和多余.有没有办法让MyTools从框架外部看不见?

PS.我使用Cocoapods来分发框架,这是我的podspec(最重要的部分):

s.module_map    = 'Pod/MyModule.modulemap'
s.frameworks    = 'CoreData', 'CoreTelephony', 'SystemConfiguration'
s.resources     = 'Pod/Classes/MessageStorage/*.xcdatamodeld'
s.public_header_files = 'Pod/Classes/**/*.h'
s.private_header_files = 'Pod/Classes/MyTools/**/*.h'
s.source_files  = 'Pod/Classes/**/*.{h,m,swift}'
Run Code Online (Sandbox Code Playgroud)

PSS.我的伞形标题不会导入MyTools.h

PSSS.只是试图从主模块中排除标题:

framework module MyModule {
    umbrella header "MyModule-umbrella.h"

    export *
    exclude header "MyTools.h"

    explicit module Private {
        header "MyTools.h"
    }
}
Run Code Online (Sandbox Code Playgroud)

没运气.

frameworks module access-control cocoapods swift

8
推荐指数
1
解决办法
2851
查看次数

dyld:未加载库:@ rpath/CoreNFC.framework/CoreNFC,iOS11和Xcode 9 beta

CoreNFC sampleXcode 9.0 beta 2中运行代码时遇到此错误并且应用程序崩溃

dyld: Library not loaded: @rpath/CoreNFC.framework/CoreNFC
  Referenced from: /var/containers/Bundle/Application/2837709C-C852-4811-B696-38F2725554D4/iOS-11-by-Examples.app/iOS-11-by-Examples
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

iphone swift ios11 xcode9-beta core-nfc

6
推荐指数
2
解决办法
2029
查看次数

bitcode 是否支持弱链接第三方框架?

问题在标题中简单说明。这是我的设置:

构建一个动态框架,可选择链接(弱链接)到 GoogleInteractiveMediaAds.framework。对于使用我的框架的应用程序,GoogleInteractiveMediaAds 是一个可选的依赖项,如果没有它,框架也能正常工作。这是目前工作。

然而,当尝试从位码重建时会出现问题,这通常发生在选择“从位码重建”导出 Ad Hoc 构建时。位码编译过程失败:

ipatool failed with an exception: #<CmdSpec::NonZeroExitException: $/Applications/Xcode.app/Contents/Developer/usr/bin/bitcode-build-tool ...
Run Code Online (Sandbox Code Playgroud)

并深入查看日志文件,我找到了错误描述:

Failed to resolve linkage dependency MyFramework arm64 -> @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds: Could not resolve @rpath in @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds from MyFramework
error: GoogleInteractiveMediaAds not found in dylib search path
Run Code Online (Sandbox Code Playgroud)

注意:GoogleInteractiveMediaAds.framework 确实包含位码。

显然,这个错误是通过不选择“从位码重建”来避免的。如果我要回答我自己的问题,我会说,不,看起来从 bitcode 编译时,您不能使用弱链接框架。仅仅是因为 bitcode 编译步骤试图链接到未包含在应用程序目标中的框架。但是,我无法找到任何关于使用位码弱链接的官方文档,或者任何相关的 StackOverflow 答案,所以我不确定我是否遗漏了什么,或者是否有一些相关的编译器/链接器设置我很想让它发挥作用。

frameworks llvm weak-linking ios bitcode

5
推荐指数
1
解决办法
366
查看次数