繁体   English   中英

Xcode Swift:如何导入Swift项目

[英]Xcode Swift: how to import a Swift project

我已经做了一个Xcode Swift项目(“ Project1”)。 在新项目(“ Project2”)中,我在添加项目1时遇到问题。

我尝试将项目1添加到项目2的构建阶段(目标相关性,已编译的源代码,与库的链接二进制文件); 没有用 当添加到已编译的源代码中时,无论我选择哪个选项(文件夹引用,组,如有需要,复制)都将无效。

我在以下位置没有编译器错误:

import Project1

但是,当我尝试使用项目1中的类时,出现错误“使用未声明的类型”。

我还尝试了以下链接,但均未成功:

这两个项目都在Swift(iOS)中。

如果有人帮助我解决了这个问题,我将非常感谢。

更新: Project 1不是框架-它是iOS应用程序。 我需要在项目2中使用其某些类。问题是项目1通过桥接标头使用了Objective C库Common Crypto。 当我手动将项目1类添加到项目2中时,在使用Common Crypto的项目1 Swift代码中收到错误(“未解决的标识符”)。

简而言之:我有一个iOS应用程序(项目1),该应用程序在Swift中,但是通过桥接头使用Common Crypto。 当我从项目1向项目2中添加许多类时,它无法解析对Common Crypto变量的引用(在项目1中)。

编辑:由于具有CommonCrypto作为依赖项,因此必须将module添加到Project2项目中来解决您的问题(这是最简单的方法,无需求助于伞形框架)。 添加一个run script build phase并包含http://pastebin.com/1vmiqffu

-鸣谢:脚本“被盗”: https : //github.com/henrinormak/Heimdall

好的,所以我在这里假设Project1实际上有一个框架作为目标。 您要使用的类型上设置了哪些访问权限

这是我遇到的一些Swift和框架的catchya:

  • 您没有桥接头,而是框架的头文件( ModuleName.h )内包含非Swift依赖项的头。 这也意味着这些将可用于您导入它们的任何项目。 据我所知,您需要使用module.modulemap才能使用私有标头和包含。
  • 通常,所有Swift类/结构/定义通常都是内部的。 这是一个非常好的设计选择,它迫使您考虑对编写的每个组件的访问权限。 默认情况下,将事物保持私有状态可以更轻松地仅打开真正需要打开的事物(公共,开放),从而使代码维护更加容易,因为您知道私有事物只能在同一上下文中访问。 (否则:错误)

如需更多帮助,此链接可能对您如何做一些基本操作有所帮助:

您的第一个ios framewok(快速)

假设Project1是一个框架,而Project2是使用该框架的应用程序:

  • 创建一个名为TestWorkspace的原始Workspace (Xcode File-> TestWorkspace > Workspace)
  • Finder ,将Project1.xcodeproj文件拖到TestWorkspace
  • Finder ,将Project2.xcodeproj文件拖至Project1上方的TestWorkspace

编辑您的TestWorkspace模式Build

  • 添加Project1Project2
  • 确保Project1Project2之上
  • 取消选中“ Paralellize构建”以确保首先构建Project1
  • 建立
  • 选择Project2的目标->常规
  • 将artefact project1.framework (在“ Products组中)拖到“链接的Framworks和库”

注意:要对客户端可见,project1.framework中的所有类和方法都必须是publicopen 在Apples文档中找到详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM