NativeScript:在 Pod 示例中运行的 CocoaPod 不会在插件项目中公开符号
NativeScript: CocoaPod that works in Pod example does not expose symbols in plugin project
我正在尝试了解将本机库代码引入 iOS 的 NativeScript 插件的最佳方式。我过去曾成功引入 CocoaPod 并从中访问符号。所以我想创建自己的。
我按照 pod lib create TestPod
的过程生成我的库项目。 (https://guides.cocoapods.org/making/using-pod-lib-create.html)
'library' 是一个简单的测试:它只是创建一个 class 的函数 returns
可识别的问候字符串。
关联的“示例应用程序”演示生成显示此字符串的文本标签。
这一切都按预期工作,所有 运行 都在纯粹的 iOS 世界中(写在 Swift 中)。
在 Nativescript 方面,我正在使用 Nativescript 插件种子,并按照指示在 src/platforms/iOS 文件夹中声明我的 Podfile。我的“插件”(作为测试是微不足道的)在 pluginName.ios.js 文件中有 iOS-specific 部分。我在这里有一个单独的测试方法,用于验证我可以访问并使用原生 iOS 平台符号(例如 NSMutableString)并且按预期工作。我想对从我的库中导入的本地代码做同样的事情。
但是当我将 Podfile 引入 Nativescript 时,它构建正常,但我无法看到我期望看到的任何符号。
我生成了打字,但我也没有找到它们,但我确实找到了一个“TestPod.d.ts”打字文件,它声明了一些版本信息和一个神秘的 class 命名为“UITest”,我没有定义和承担与我在任何地方都找不到的“SimpleTest”class 没有任何相似之处。
我确定我在这里遗漏了一些知识渊博的人可能显而易见的东西。但我无法猜测它是什么。有什么想法吗?
import Foundation
@objc public class SimpleTest : NSObject {
public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
我使用以下方式在插件中调用它:
public testNativeLib() : string {
let str:string;
try {
const testClass = new SimpleTest()
str = testClass.announce()
} catch(e) {
str = e.message;
}
return str;
}
我为 str 返回的是 catch case 错误消息:“找不到变量:SimpleTest”
没有看到 pod 文件的源代码;唯一的猜测是你没有在任何你想公开的东西上使用@objc。如果您不使用 @objc 公开任何内容(或从本机 objc class 下降,因此它被 swift 自动标记)NativeScript 无法看到它。
请注意 Swift 中的某些类型目前无法被 NativeScript(或 ObjC)使用,您必须在 swift 中使用与ObjC 以便 NativeScript 可以使用它。
请参阅:https://docs.nativescript.org/guides/ios-source-code 了解有关要求的更多信息...
代码需要为:
import Foundation
public class SimpleTest : NSObject {
@objc public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
将 @objc
移动到您想要公开的实际 property/function。 NSObject
已经导致 class 暴露了成员。
生成的元数据:
在插件中使用 swift 源文件的完整演示现在位于
如果我可以完全控制源,那么我通常不会在混音中添加另一个移动片段(即 cocoapod);只需让 xcode 编译 swift 代码并公开它,无需添加任何其他可能会破坏的地方。
但是,如果您想了解如何制作实际的 swift CocoaPod 插件;检查任何使用 swift 代码和 cocoapod 的插件回购协议:
- https://github.com/tomvardasca/nativescript-crypto
- https://github.com/arpit2438735/nativescript-tglib
- https://github.com/Daltron/NotificationBanner
以实际的椰子足类为例;您需要有一个有效的 Podfile 和一个有效的 podspec 文件!一旦你有了这些;构建应用程序时,您可以打开 xcode 并验证 cocoapod 是否已链接。如果未链接,则您的 podfile/podspec 搞砸了并且与 Cocoapod 的问题有关不是 NativeScript 问题。所以在那种情况下;您需要遵循一些 Cocoapod 教程才能使其正常工作。
请注意;强烈建议在使用 cocoapods 进行测试时频繁更新平台文件夹。有时,Nativescript 无法正确检测到本机代码的更改,因此它不会重建 xcode project/workspace 文件。因此,核对您的平台文件夹当然会迫使它重建它们。如果你不这样做,你会浪费很多时间在 cocoapods 上。
当运行示例项目你会看到这个:
此外,在演示中,我将代码生成的元数据保存在demo/metadata文件夹中,以便您查看。
我正在尝试了解将本机库代码引入 iOS 的 NativeScript 插件的最佳方式。我过去曾成功引入 CocoaPod 并从中访问符号。所以我想创建自己的。
我按照 pod lib create TestPod
的过程生成我的库项目。 (https://guides.cocoapods.org/making/using-pod-lib-create.html)
'library' 是一个简单的测试:它只是创建一个 class 的函数 returns
可识别的问候字符串。
关联的“示例应用程序”演示生成显示此字符串的文本标签。
这一切都按预期工作,所有 运行 都在纯粹的 iOS 世界中(写在 Swift 中)。
在 Nativescript 方面,我正在使用 Nativescript 插件种子,并按照指示在 src/platforms/iOS 文件夹中声明我的 Podfile。我的“插件”(作为测试是微不足道的)在 pluginName.ios.js 文件中有 iOS-specific 部分。我在这里有一个单独的测试方法,用于验证我可以访问并使用原生 iOS 平台符号(例如 NSMutableString)并且按预期工作。我想对从我的库中导入的本地代码做同样的事情。
但是当我将 Podfile 引入 Nativescript 时,它构建正常,但我无法看到我期望看到的任何符号。 我生成了打字,但我也没有找到它们,但我确实找到了一个“TestPod.d.ts”打字文件,它声明了一些版本信息和一个神秘的 class 命名为“UITest”,我没有定义和承担与我在任何地方都找不到的“SimpleTest”class 没有任何相似之处。
我确定我在这里遗漏了一些知识渊博的人可能显而易见的东西。但我无法猜测它是什么。有什么想法吗?
import Foundation
@objc public class SimpleTest : NSObject {
public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
我使用以下方式在插件中调用它:
public testNativeLib() : string {
let str:string;
try {
const testClass = new SimpleTest()
str = testClass.announce()
} catch(e) {
str = e.message;
}
return str;
}
我为 str 返回的是 catch case 错误消息:“找不到变量:SimpleTest”
没有看到 pod 文件的源代码;唯一的猜测是你没有在任何你想公开的东西上使用@objc。如果您不使用 @objc 公开任何内容(或从本机 objc class 下降,因此它被 swift 自动标记)NativeScript 无法看到它。
请注意 Swift 中的某些类型目前无法被 NativeScript(或 ObjC)使用,您必须在 swift 中使用与ObjC 以便 NativeScript 可以使用它。
请参阅:https://docs.nativescript.org/guides/ios-source-code 了解有关要求的更多信息...
代码需要为:
import Foundation
public class SimpleTest : NSObject {
@objc public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
将 @objc
移动到您想要公开的实际 property/function。 NSObject
已经导致 class 暴露了成员。
生成的元数据:
在插件中使用 swift 源文件的完整演示现在位于
如果我可以完全控制源,那么我通常不会在混音中添加另一个移动片段(即 cocoapod);只需让 xcode 编译 swift 代码并公开它,无需添加任何其他可能会破坏的地方。
但是,如果您想了解如何制作实际的 swift CocoaPod 插件;检查任何使用 swift 代码和 cocoapod 的插件回购协议:
- https://github.com/tomvardasca/nativescript-crypto
- https://github.com/arpit2438735/nativescript-tglib
- https://github.com/Daltron/NotificationBanner
以实际的椰子足类为例;您需要有一个有效的 Podfile 和一个有效的 podspec 文件!一旦你有了这些;构建应用程序时,您可以打开 xcode 并验证 cocoapod 是否已链接。如果未链接,则您的 podfile/podspec 搞砸了并且与 Cocoapod 的问题有关不是 NativeScript 问题。所以在那种情况下;您需要遵循一些 Cocoapod 教程才能使其正常工作。
请注意;强烈建议在使用 cocoapods 进行测试时频繁更新平台文件夹。有时,Nativescript 无法正确检测到本机代码的更改,因此它不会重建 xcode project/workspace 文件。因此,核对您的平台文件夹当然会迫使它重建它们。如果你不这样做,你会浪费很多时间在 cocoapods 上。
当运行示例项目你会看到这个:
此外,在演示中,我将代码生成的元数据保存在demo/metadata文件夹中,以便您查看。