标签: ios-frameworks

iOS Static vs Dynamic框架说明

我不得不承认,随着iOS 8的发布,我对iOS中的动态和静态框架感到有些困惑.

我正在寻找一种方法来分发我创建的库,我需要支持iOS 7及更高版本.(注意:这将是一个专有框架.我不能使用可可豆荚,我也不能分发来源).这是我已经知道的:

  • iOS 8为iOS引入了"嵌入式框架",但据我了解,它们不适用于iOS 7,仅适用于iOS 8及更高版本.
  • 我可以选择将我的库分发为静态库(.a文件)并分发标头.我知道这是处理这种情况的常用方法,但我想找到一些比这更简单的东西(如果可能的话,还要用它捆绑一些资源).
  • 我还发现iOS 7不支持动态.framework库(仅静态),因为它不支持动态链接.但是iOS 8和静态链接一样.

以下是关于此信息的问题:

  • 我看到我可以创建一个.framework目标,并通过将Mach-O类型更改为"静态库"使其成为静态.这是否足以支持iOS 7而没有任何问题,并且还可以将我的库分发为.framework bundle?如果是这样的话,为什么iOS 8中的"嵌入式框架"是一个很大的交易,因为互联网上的许多资源都在暗示?我错过了什么?
  • 是否有必要对.framework进行编码,就像我对其他任何应用程序一样?
  • 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办?我需要为此制作一个单独的.bundle文件吗?

frameworks static-libraries static-linking ios ios-frameworks

107
推荐指数
5
解决办法
3万
查看次数

Swift框架:没有找到Umbrella标题'[...].h'

在包含Objective-CSwift代码的自定义框架中,Swift编译器抛出以下错误:

[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
  umbrella header "bugtest.h"
                  ^
<unknown>:0: error: could not build Objective-C module 'bugtest'
Run Code Online (Sandbox Code Playgroud)

ios ios-frameworks swift

107
推荐指数
10
解决办法
5万
查看次数

创建iOS/OSX框架:是否有必要在分发给其他开发人员之前对其进行编码?

我正在学习如何创建iOS和OSX框架.我们以iOS为例,到目前为止,以下步骤对我有用:

  1. xcodebuild框架使用-sdk iphonesimulator和Build动作
  2. xcodebuild框架使用-sdk iphoneos和Build动作
  3. 使用lipo工具创建通用二进制文件,以lipo -info产生预期的:

胖文件中的体系结构:Foo.framework/Foo是:i386 x86_64 armv7 arm64

问题是:

  1. 我读到我的框架可以由使用它的开发人员重新签名:"代码登录复制"但我不明白它的先决条件是什么,即我应该添加代码签名步骤以使用我的签名身份对该通用二进制进行编码将它分发给其他开发者?

  2. 如果以前是肯定的 - 我应该使用我的"iPhone Distribution:..."身份或"iPhone Developer:..."就足够了(这样我的框架成为某个iOS项目的一部分就会通过各种验证,特别是App Store验证)?

我的回答的背景是"CodeSign错误:SDK'iOS 8.3'中的产品类型'Framework'需要代码签名",我在许多第三方框架和Carthage#235或"代码对象未签名"中看到过在所有"(一个例子:我在Realm#1998报道的问题.

所以我想确保我的框架用户在使用它们时不会遇到任何代码签名问题.

PS当不是应用于单个开发人员而是应用于作为框架供应商的组织时,这个问题变得更加有趣.

code-signing ios ios-frameworks

79
推荐指数
2
解决办法
3万
查看次数

Xcode中的"找不到框架"

我知道有几次这样问过.我按照这些说明进行操作:

在Xcode 5中添加框架到项目并添加了*relative*路径

xcode4:链接器错误:找不到选项的目录

Xcode仍然给出了这个错误:

在此输入图像描述

这是我目前的配置:

在此输入图像描述

在此输入图像描述

螺栓框架是我可以使用Parse SDK.我从这里下载了空白项目:https://parse.com/apps/quickstart#parse_data/mobile/ios/native/new

它正在发挥作用.我试图复制每个配置选项,但它仍然无法正常工作.

xcode ios ios-frameworks xcode6

59
推荐指数
11
解决办法
7万
查看次数

如何使用Frameworks,Extensions和CocoaPods构建Xcode项目

注意:这是一个更抽象和简化的问题子集.

随着Touch Frameworks的加入,ExtensionsApple Watch Xcode 6项目和工作区变得越来越复杂.

如果你将CocoaPods添加到这个组合中,事情开始变得几乎无法管理.

如何构建具有以下目标和依赖性的Xcode项目/工作区?(假设:我正在为所有组件使用Git,我使用CocoaPods用于所有第三方代码,我正在使用Xcode 6).

  • MyCoolApp
    • 通过CocoaPods的几个第三方UI库
    • MyCoolNetworking.framework,我作为Git子模块创建的框架(项目)
      • 通过CocoaPods进行AFNetworking
      • 其他数据处理代码通过CocoaPods
    • MyCoolAppBusinessLogic.framework,由app和所有扩展程序使用(如下)
      • 包括来自CocoaPods的一些常见于app和扩展的代码
    • MyCoolToadyView,一个TodayView扩展目标
    • MyCoolWatch,Apple Watch扩展目标

如您所见,这是一个复杂的结构,包括几个CocoaPods实例.有关如何解决任何或所有这些问题的任何建议都会有所帮助.

(我的计划是写下我自己的一些想法,然后综合其他人的答案,这无疑将是一份活文件).

ios-frameworks cocoapods xcode6 ios-extensions

47
推荐指数
1
解决办法
1617
查看次数

如何在将CocoaPods更新到0.36.x及更高版本后引用Bridging-Header.h中的头文件?

更新到CocoaPods 0.36.x后,我无法将导入添加到我的Bridging-Header.h文件中.我得到"找不到DBSphereView.h文件".

该文件确实存在于:

"Pods/DBSphereTagCloud/DBSphereView.h"
"Headers/public/DBSphereTagCloud/DBSphereView.h"
"Headers/private/DBSphereTagCloud/DBSphereView.h"
Run Code Online (Sandbox Code Playgroud)

我的桥文件:

#ifndef Loan_Bridging_Header_h
#define Loan_Bridging_Header_h
#import "DBSphereView.h"
#endif
Run Code Online (Sandbox Code Playgroud)

我可以使用框架.我参考了一个众所周知的框架(Alamofire),它很棒!

我的podfile:

source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
pod 'DBSphereTagCloud', '~> 1.0'
pod 'Alamofire', '~> 1.1'
Run Code Online (Sandbox Code Playgroud)

在更新之前,我没有导入头文件的问题.

在将CocoaPods更新为0.36.x后,如何在Bridging-Header.h中引用头文件?

谢谢!

编辑:

我还尝试根据cocoapods.org的"Get Started"示例创建一个单独的项目,但没有成功.使用框架后,我似乎无法在我的桥接头文件中引用头文件.我一定错过了一些细节?

ios ios-frameworks cocoapods swift

47
推荐指数
2
解决办法
3万
查看次数

类X在<framework>和<application>中实现,将使用其中一个,其中一个是未定义的

我收到这个警告:

Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined
Run Code Online (Sandbox Code Playgroud)

这个警告在网络上有很多内容,但我没有发现任何可以解决我遇到的具体问题的内容.

脚本

我已经构建了MyFramework和MyApplication(作为MyFramework的测试/演示应用程序).

MyFramework使用CocoaPod(我将其称为CoolPod),我也想在MyApplication中使用它(并且假设MyFramework的消费者也是合理的).

我需要能够将MyFramework分发为.framework(用于封闭源代码).但是,这意味着MyFramework将CoolPod嵌入其编译库中.

现在当我将MyFramework和CoolPod导入MyApplication时,我得到了这个冲突(输出上面显示的警告),因为CoolPod的类已经包含在MyFramework的库中(因为嵌入了CoolPod).

所以我们有这个结构:

CoolPod -> MyFramework \
                        MyApplication
               CoolPod /
Run Code Online (Sandbox Code Playgroud)

我该如何避免这种冲突?

  • 有没有办法让我的MyApplication向MyFramework提供CoolPod?
  • 我是否必须通过MyFramework管理CoolPod的标题?

我曾考虑在MyApplication中包含CoolPod的头文件(但不包括它的lib),但这对于一个简单的案例来说似乎过于复杂.

非常感谢任何帮助,这实在是在阻止我.

谢谢,

靛青

ios ios-frameworks cocoapods

41
推荐指数
1
解决办法
9264
查看次数

dyld:库未加载6.0模拟器/ 6.0设备的不同行为

我的应用程序在Xcode中的iPhone 6.0模拟器上正常运行,但是当我尝试在我的6.0设备上运行它时,我收到以下致命错误:

dyld:未加载库:/System/Library/Frameworks/AdSupport.framework/AdSupport引自:/var/mobile/Applications/26329A7C-04B0-415A-B8EB-3C59CC1EC0B1/hammerhead.app/hammerhead原因:未找到图像

我确信我的手机版本6.0并且是最新的.我的部署目标在我的项目文件和info.plist文件中设置为6.0.我该怎么办?

问题似乎与AdSupport框架有关,我将其放入我的应用程序中,因此新的Facebook SDK(3.1)可以在iOS 6中运行.

xcode cocoa-touch dyld ios-frameworks ios6

39
推荐指数
2
解决办法
1万
查看次数

Xcode中的Pod错误"Id:框架未找到Pods"

我试图从bitbucket存储库克隆一个项目,并Id: framework not found Pods clang: error: linker command failed with exit code 1 (use -v to see invocation)在尝试在工作区中运行Xcode项目时收到错误.这些是我遵循的步骤,如果有人能让我知道我做错了什么,那就太好了!

  1. git clone (link to bitbucket)
  2. 将Xcode pods项目中的配置设置更改none为调试和发布
  3. 执行 pod install
  4. 打开Xcode工作区文件
  5. 试图在Xcode中构建并收到错误 Id: framework not found Pods clang: error: linker command failed with exit code 1 (use -v to see invocation)

编辑这是podfile:

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'

target 'Oncarb' do
  pod 'Alamofire'
  pod …
Run Code Online (Sandbox Code Playgroud)

git xcode ios ios-frameworks cocoapods

39
推荐指数
3
解决办法
4万
查看次数

如何抑制`警告:链接对dylib不安全,无法在应用程序扩展中使用?

我有一个在iOS应用程序和扩展程序之间共享的动态框架.该框架中有一些代码引用UIApplication,当然,这些代码在扩展中不可用.这些电话是完全孤立的,所以我并不担心它们会导致我的分机出现问题.

由于警告消息中没有指定标志,可能无法执行此操作,但在构建项目时如何抑制 warning: linking against dylib not safe for use in application extensions

linker-warning ios ios-frameworks ios-extensions

38
推荐指数
4
解决办法
1万
查看次数