我正在构建一个需要使用本机API的应用程序,但是事实证明,使用这些API极其困难,因为许多参数在TypeScript中没有明确的类似物,缺少定义等。人们如何实际使用NativeScript进行构建?
作为示例,我正在尝试使用Apple的Secure Enclave在this页面之后生成一个公共-私有密钥对。这些片段是用Swift编写的(我认为),因此打字稿中不存在语法的许多方面。经过数小时的反复试验,我提出了不会引起错误的参数。但是然后我得到的privateKey
值是null。
我可以尝试的几十种或一百种不同的参数排列,它们等同于Swift代码的 sort ……这不是人们在NativeScript上的构建方式吗?我到处都看过,我问过NativeScript Slack,我看过帖子...
tns create
(choose Angular and hello-world)
npm install --save-dev tns-platform-declarations
在项目根目录中添加reference.d.ts
。将以下内容放入其中:
/// <reference path="./node_modules/tns-platform-declarations/ios.d.ts" />
/// <reference path="./node_modules/tns-platform-declarations/android.d.ts" />
更新tsconfig.json
,使paths
看起来像这样:
"~/*": ["src/*", "./node_modules/tns-core-modules/*", "./node_modules/*"]
将app.component.html
修改为只有一个按钮
<Button (tap)="onTap()"></Button>
修改app.component.ts
,添加按钮代码:
onTap() {
const access = SecAccessControlCreateWithFlags(
kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
SecAccessControlCreateFlags.kSecAccessControlPrivateKeyUsage,
new interop.Pointer(0)
);
const attributes = {
kSecAttrKeyType: 'type',
kSecAttrKeySizeInBits: '256',
kSecAttrTokenID: kSecAttrTokenIDSecureEnclave,
kSecPrivateKeyAttrs: {
kSecAttrIsPermanent: 'true',
kSecAttrApplicationTag: '<# a tag #>',
kSecAttrAccessControl: 'access',
},
};
const privateKey = SecKeyCreateRandomKey(attributes as any, new interop.Pointer(0));
console.info(privateKey);
}
我确定我对Swift代码的解释(如上所示)存在很多问题。对此的解决方案将是不错的。但是我真正的问题是人们实际上如何使用Angular(纯NativeScript)进行构建?我不能只是猜测打字稿中这些参数应该是什么!
预期结果:
privateKey不为null,这是访问本机API的明智方式吗?
答案 0 :(得分:2)
是的,根据类型确切地解释要写的内容并不总是那么容易,因此确实需要实践,并且需要通过搜索iOS运行时存储库(在测试,问题甚至是开发环境中)获得一些经验。代码库本身)。即使是我们最好的人也可能会时不时地“发疯”。
在浏览Apple API文档时,最好将语言设置为Obj-C(因为TypeScript类型是从中生成的运行时)。
如果您已经完全熟悉如何调用API(例如,您已经设法使其先在本机应用程序中运行),它也将大有帮助。是的,这对Swift开发人员而言是艰巨的任务。
猜测,您需要清理try{
//the code that wants from the user to enter the radius
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Invalid entry, please try again");
}
字典。我参考了“ Generating New Cryptographic Keys”(生成下面的链接)文档,以更好地了解要输入的值。这是一个刺痛点:
attributes
警告:我尚未运行代码。仍然很可能是错误的..!
参考文献:
但是我真正的问题是人们实际上如何使用Angular进行构建?我不能只是猜测打字稿中这些参数应该是什么!
Angular不会出现在此;对于所有口味的NativeScript,访问本机API的方式都相同。 NativeScript的各种非核心风格只是为了以不同方式(即声明式)管理UI。
TypeScript类型为编写内容提供了很好的指导,但是确实需要一些额外的经验来弄清楚如何解释它。问题的部分原因是Obj-C不能完美地映射到TypeScript中,但是我想说NativeScript团队对此做了惊人的工作。
如果这一切似乎都无法克服,则可以改为制作本机模块,用Obj-C(或Swift)编写,然后将简单的API绑定公开给本机模块。但是如果您也决定走那条路,那么期望会遇到学习上的弯路!
如果您遇到其他问题,建议您在Slack forums的#ios频道中发布。那里有一些专业人士,他们内外都了解这种黑暗的艺术,他们乐于提供帮助。只是在正确的时间赶上他们的问题。
如果它可以帮助阅读本文的任何人,我将通过NativeScript here提供各种不同的iOS API调用示例片段,尽管我以前从未处理过此安全框架中的API。