标签: ios-frameworks

将第三方框架添加到iOS应用程序中的Xcode子项目或主项目中

我的 Xcode 项目“MyMainApp”有一个名为“MyLib”的静态库类型 Xcode 子项目。现在我需要在我的 iOS 应用程序中使用一些第三方 iOS 框架。我只想将它们添加/链接到 MyLib 而不是 MyMainApp,这样我就可以使 MyLib 可重用且独立,以便在我的其他 iOS 应用程序中使用它。MyMainApp 中的一些视图控制器使用属于 MyLib 的视图控制器之一。MyLib 中的此视图控制器使用第三方框架内的类的功能。现在我面临的问题是,如果我将第三方框架添加到 MyLib 而不是将它们添加到 MyMainApp,我会收到链接器错误“词法或预处理器问题。未找到 XXX.h 文件”。如果我将框架添加到 MyMainApp 和 MyLib 中,一切都会正常运行,但这不是我想要的。我已确保框架搜索路径和标头搜索路径是正确的。在这种情况下,我无法找到苹果公司的任何参考资料。我想知道将第三方框架和库添加/链接到静态库类型的 Xcode 子项目的最佳实践。还有解决方案可以克服链接器错误并将框架仅添加到静态库项目吗?

xcode subproject ios ios-frameworks

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

iOS 框架本地化不起作用

我有一个从我们的应用程序创建的框架,当该框架添加到要使用的新项目时,它运行得很好。

现在我们想要添加不同语言的本地化,我们在应用程序中做到了这一点,一切都运行良好,但现在我们想要更新我们的框架以使用多种语言进行本地化。因此,我们在框架内添加了所有本地化的 xib 及其字符串,但框架中的 nib 文件始终只显示英语。

我不太熟悉框架,因为它是由其他人完成的,我们只是遵循如何更改文件并创建更新的框架。

我一直在尝试在互联网上查找一些信息,但我发现的只是如何更改代码中的 UILabel,而不是通过本地化 nib 文件。

有什么建议么?

localization ios ios-frameworks

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

在动态框架中包含静态库的公共头文件

我正在为 iOS 开发一个动态框架。这个框架使用了一个静态库,它集成了CocoaPods

+--MyDynamicFramework
   +--PublicHeader1.h
   +--PublicHeader2.h
   +--Sources
   +--Pods
      +--StaticLib
         +--PublicHeader3.h
         +--StaticLib.a
Run Code Online (Sandbox Code Playgroud)

现在,我在我的动态框架的源代码中使用PublicHeader3.h(它是 的一部分StaticLib),但我也想将它公开为我正在构建的动态框架的公共标头。因此,使用我的动态框架的应用程序应该能够看到所有三个公共标头。这是可能的,如果是,如何?

xcode ios ios-frameworks cocoapods

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

Swift Framework 构建针对设备失败,但针对模拟器失败

任何想法为什么构建会成功用于模拟器而不是设备?

我创建了一个 Cocoa 框架,并且能够将它添加到一个新的单页应用程序项目中,并调用框架中定义的方法。只要我将模拟器选为构建目标而不是设备,就可以构建项目。我没有试过运行它,只是构建。我正在使用 Swift 3 和 XCode 8.1。

我收到Use of unresolved identifier错误。

ios-frameworks swift3 xcode8

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

在框架目标中包含一个 pod:找不到文件

我正在使用框架目标(为了更好的代码重用和 IB_Designables),并且我已经有了一个完美运行的框架目标。我也决定将其他一些类移至框架目标。

我已经设置了 pods(在这种情况下只有一个),但是每当我尝试包含 pod 时,我都会收到 not found 错误。

在此处输入图片说明

如果我也尝试使用模块方法,则没有变化:

在此处输入图片说明

问题是我也已经有了另一个框架,具有相同的设置(交叉检查所有编译器设置/链接器标志/构建阶段等),并且该框架在导入其 pod 时没有问题。

这是我的 podfile(TUComponents正在处理,TUModels是失败的):

[...]
target 'TUComponents' do


    pod 'AHKNavigationController'
    pod 'TTTAttributedLabel'

    use_frameworks!


end

target 'TUModels' do


    pod 'JSONModel'

    use_frameworks!


end
Run Code Online (Sandbox Code Playgroud)

更奇怪的是;Xcode 在代码完成导入JSONModel/JSONModel.h标头(或JSONModel在模块 @import 的情况下)没有问题。但是当我尝试编译时,它失败了。

我的配置可能有什么问题?

更新:如果我放弃在 pod 中使用框架并使用常规的旧静态库,并将框架中的允许非模块化包含设置为是,我可以构建。但是我不知道为什么我在使用 Pod 框架时无法构建。

xcode ios ios-frameworks cocoapods xcode8

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

可选择通过构建设置在 Xcode 中嵌入框架

如何通过在 Xcode 中的构建设置选择性地嵌入框架?例如,我只想在调试版本中嵌入一个框架。这该怎么做?

xcode ios-frameworks

5
推荐指数
0
解决办法
69
查看次数

xcodebuild 构建操作以分发带有剥离 dSYM 的动态框架

我曾经使用以下方法构建用于内部开发的动态框架

xcodebuild -workspace <workspace_path> build -configuration "Release"
Run Code Online (Sandbox Code Playgroud)

现在我们正在向 3rd 方开发人员提供框架,我们希望从框架二进制文件中删除符号。

我注意到使用build选项二进制文件总是包含符号,即使项目配置为:

DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
STRIP_INSTALLED_PRODUCT = YES
STRIP_STYLE = non-global
Run Code Online (Sandbox Code Playgroud)

似乎使用archivexcodebuild 操作,框架是用没有符号的二进制文件和单独的 dSYM 文件生成的。

但是存档操作会产生一个 .xcarchive 空目录(在~/Library/Developer/Xcode/Archives/<DATE>

生成的工件(二进制文件和 dSYM)可以在 ~/Library/Developer/Xcode/DerivedData/<project_build_dir>/Build/Intermediates/ArchiveIntermediates/<framework_name>.framework/BuildProductsPath/Release-iphoneos

  • archive用于构建动态框架是否正确?
  • 工件不应该放在相关的 .xcarchive 中吗?
  • 是否有其他设置可用于将生成的工件正确放置在 .xcarchive 中?
  • 您通常如何构建和分发动态框架?

----- 编辑:2017 年 6 月 9 日 -----

  • 是否有其他设置可用于将生成的工件正确放置在 .xcarchive 中?
  • 工件不应该放在相关的 .xcarchive 中吗?

设置后:

Skip Install (SKIP_INSTALL) = NO 
Run Code Online (Sandbox Code Playgroud)

.xcarchive 正确填充了二进制 dSYM 和其他东西。

debug-symbols ios ios-frameworks dsym

5
推荐指数
0
解决办法
832
查看次数

“MyClass”不可用:找不到此类的 Swift 声明 - 模拟器

我有我的框架,我支持不同的架构。为了支持模拟器,我在有效架构中使用x86_64


在此处输入图片说明

但是当我在应用程序中使用我的框架时,在模拟器上运行应用程序时出现错误:

“MyClass(In framework)”不可用:找不到此类的 Swift 声明

注意:它在设备上运行良好。

xcode ios ios-frameworks

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

为什么当我的框架被导入到其他地方时,我作为 Optional 链接的 iOS 框架会被视为需要?

我正在尝试向我公司发布的现有 iOS 框架添加功能。新功能要求我们使用许多其他第三方提供的框架。如果我们的客户不想激活新功能,我们希望确保他们不需要部署这些框架。

当我在我自己的框架的目标/通用/链接框架和库部分引用这些框架时,我已将这些框架中的每一个都配置为可选。我还在我的框架的目标/构建阶段/链接二进制与库部分中将它们标记为可选。我期待这意味着当这些框架不存在时,我的框架可以导入到 xcodebuild 中。

这适用于我构建框架的机器,但是一旦其他人尝试将我的新框架导入他们的 Xcode 对象到带有消息“缺少所需模块‘x’”的导入语句(其中 x 是顶级第三方我的框架导入的框架)。

我尝试删除它们并将“-weak_framework {name}”形式的链接器指令添加到构建中,但我可以从 xcodebuild 日志中看到 Optional 设置只是简单地生成这些,而且更方便。

我的框架使用 Swift 5,以防万一。

我错过了什么?

非常感谢您提供任何线索。

optional ios-frameworks

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

iOS:如何在 Framework 中添加 Assets 文件夹以及如何在代码中访问它们?

I create an iOS app and added a framework to it. The generated framework doesn't have an assets folder like the generate Single View App. So I made an Assets folder inside the framework folder and drag and drop it to xcode, choose the target as my framework.

I tried using the asset but the asset doesn't show up. Can show one show me how to correctly do this? is it possible to create an assets folder inside a …

ios ios-frameworks swift

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