与游乐场相关的依赖框架

时间:2017-01-22 19:12:47

标签: ios swift swift-playground xcplayground

假设我有2个框架:

  • MyApp.framework
  • FancyLabels.framework

MyApp.framework有一个故事板,它使用FancyLabels.framework中的类。

如果我创建一个链接并嵌入两个框架的应用程序目标,我可以从MyApp.framework实例化视图控制器没问题。

但是如果我尝试在操场上从MyApp.framework实例化一个视图控制器,它就无法从FancyLabels.framework中找到这些类。

我的游乐场代码:

//: Playground - noun: a place where people can play

import UIKit
import MyApp
import FancyLabels

let bundle = Bundle(for: MyAppViewController.self)
let storyboard = UIStoryboard(name: "Main", bundle: bundle)
let vc = storyboard.instantiateViewController(withIdentifier: "MyAppViewController")
let view = vc.view

控制台中的输出:

2017-01-22 19:18:17.016 MyPlayground[98260:3124481] Unknown class _TtC18FancyLabels11StyledLabel in Interface Builder file.
2017-01-22 19:18:17.037 MyPlayground[98260:3124481] Failed to set (styleString) user defined inspected property on (UILabel): [<UILabel 0x7fcf175017c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key styleString.

2 个答案:

答案 0 :(得分:2)

我也很难找到最好的方法:(

我找到的最佳解决方案是创建一个空白/空白工作区,您可以在其中添加框架(只需将它们拖动到工作区中,就像添加到常规项目中一样),然后将操场添加到工作区。

然后打开工作区并在该环境中使用游乐场,而不是打开游乐场。

第一次在工作区中打开游乐场时,您会收到一条错误消息,指出无法找到该框架,但在运行build后,该框架可用。

另一个问题是,当您从此工作区访问框架时,还需要关闭使用该框架的任何其他项目。

如果您想查看示例设置,可以看到&#39; Playgrounds&#39;我项目中的文件夹:https://github.com/mathewsanders/Mustard/tree/master/Playgrounds

很想知道其他人是否找到了更好的方法,因为在使用工作区时必须关闭其他项目的限制非常烦人。

答案 1 :(得分:0)

终于弄明白了。问题是我的&#34; FancyLabels&#34;框架使用了Carthage(XCGLogger)的预构建框架。解决方案是按照适当的步骤在游乐场中使用Carthage框架,即将框架的项目从Carthage / Checkouts添加到我的工作区并构建它。然后一切都按预期工作,甚至是框架项目中的游乐场,在MyApp框架的故事板/ xib中充分使用FancyLabels。

对于那些即使没有迦太基而设置这个问题的人来说,我已经做了一个快速工作的例子来说明如何在这里设置它:https://github.com/mfclarke/NestedFrameworksInPlaygrounds/