基本上我正在尝试做的是找出一种使用Touch ID加密数据的方法.
遗憾的是,我没有找到使用Touch ID创建encryptionKey的方法,因为LAContext
API只返回aye/nay响应.
我正在应用程序中实现不同的登录方法.支持的登录方法是密码,PIN码和Touch ID.用户可以自由选择他/她想要的任何登录方法.
但是,只有密码才会发送到服务器,服务器将对用户进行身份验证.因此,只有密码存储在钥匙串中.
的encryptionKey
,用于第一加密和然后存储密码在钥匙串中,使用任何方法,用户选择作为登录方法创建的.
如果用户选择使用PIN码,encryptionKey
则从该PIN码导出,当用户选择密码作为登录方法时,可以说同样的.
我在互联网上搜索过,但只发现了我已经害怕的东西.
由于iOS只返回一个true
或false
来自Secure Enclave,因此无法创建一个encryptionKey
.
我知道钥匙串是自己加密的,但出于安全考虑(请不要详细说明)我需要一个存储在钥匙串中的加密密码.
背后的原因存储在钥匙串加密数据是因为钥匙串可以通过越狱的装置被破坏.由于我正在开发的应用程序允许用户查看(主要)企业敏感数据,因此我需要考虑越狱.
使用XCode 6.3,我注意到了一些属性属性,即:
nonnull
null_resettable
nullable
有人可以解释他们在申请时做了什么吗?
我正在尝试创建一个混合的ObjC-Swift框架.但是我试图为我的Swift文件制作一个私有模块,我失去了很多头发.
我在iOS混合动态框架中遵循了一些步骤- 将私有模块桥接objc头与/sf/answers/2581462621/中的一些步骤相结合
基本上我现在有一个module.modulemap,其中包含以下内容:
module MyCore { //Adding 'framework' before module is giving me an "Umbrella not found"-error :/
umbrella header "MyCore.h"
export *
module * { export * }
explicit module MyCorePrivate {
header "MyCore_PrivateUmbrella.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
}
在MyCore_PrivateUmbrella.h
进口所有的头我想私下接触到我的SWIFT CODE.其背后的原因只是在模块中包含1个标题然后所有要显示的标题更容易(因为您需要包含标题的特定路径...).
我的构建设置如下:
DEFINES_MODULE
:是的PRODUCT_MODULE_NAME
:MyCoreCLANG_ENABLE_MODULES
:是的SWIFT_OBJC_INTERFACE_HEADER_NAME
:MyCore-Swift.hSWIFT_INCLUDE_PATHS
:目录的路径module.modulemap
最后但并非最不重要; ALWAYS_SEARCH_USER_PATHS
设置为NO
在我的Swift文件中,我使用导入模块import MyCore.MyCorePrivate
.这按预期工作,我可以使用Objective-C中的代码.
构建项目会给我一个这样的错误(黑条只隐藏项目名称和文件路径):
现在点击错误将我带到生成MyCore-Swift.h
的@import MyCore.MyCorePrivate
看似错误的地方.
我不知道为什么这是错的,我也不知道如何解决这个问题.特别是因为它是由XCode生成的文件.
有谁知道这里发生了什么?
我写了一个包含beforeEach
和的示例组的测试用例afterEach
.我希望每个beforeEach
和afterEach
将每个调用一次it
.
唉,单个it
的beforeEach
,并afterEach
得到了多次调用.
我查看了一些文档(即Quick自己的文档和http://jasmine.github.io/2.1/introduction.html),但这些文档并没有帮助我.
这是一个小片段,演示了这一点:
class CheckerTests:QuickSpec {
override func spec() {
describe("something") {
beforeEach {
tLog.info("describe before")
}
afterEach {
tLog.info("describe after")
}
context("of something") {
beforeEach {
tLog.info("context before")
}
afterEach {
tLog.info("context after")
}
it("should behave like something") {
tLog.info("in the `IT`")
expect(true).to(beTrue())
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我的控制台记录:
以上日志提出了两个问题:
beforeEach
和afterEach
现在被称为; 我也不知道为什么我会看到多个日志调用它们.为什么他们多次被召唤?- 上面的日志显示在示例通过之前 …
在我问这个问题之前,让我提供一些额外的信息:
我有一个片段,它MenuItem
在onCreateOptionsMenu
. 添加的 MenuItem 还ActionProvider
添加了一个自定义项。
自定义ActionProvider
不使用 ActionView 而是准备一个SubMenu
具有某些可供选择的项目。出于这个原因,我设置ActionProvider
如下:
null
在onCreateActionView
方法中返回hasSubMenu()
返回 true
onPrepareSubMenu(SubMenu Menu)
我首先清除当前菜单,然后添加需要的项目onMenuItemClick
在 ActionProvider 中正确处理了com.actionbarsherlock.view.ActionProvider
而不是android.support.v4.view.ActionProvider
(不知道它是否应该有任何区别,但此时我不知道是什么)这一切在 Android 版本高于 3.0 的设备上运行良好。我看到添加的MenuItem
,它具有正确的SubMenu
(来自边界ActionProvider
)并且为每个菜单选项执行正确的操作。但是对于运行低于 3.0 的 Android 版本的设备(我只能在运行 2.3.6 的设备上进行测试),会发生一些奇怪的事情;因此有以下问题。
谷歌明确指出:
"onPerformDefaultAction()
当从操作溢出中选择菜单项时,系统会调用它,并且操作提供者应该为菜单项执行默认操作。但是,如果您的操作提供程序通过 onPrepareSubMenu() 回调提供子菜单,则即使将操作提供程序置于操作溢出中,也会显示子菜单。因此,当有子菜单时,永远不会调用 onPerformDefaultAction()。”
取自:http : //developer.android.com/guide/topics/ui/actionbar.html#CreatingActionProvider
从我的摘录来看,onPerformDefaultAction()
永远不应该在我的自定义 ActionProvider 中调用它。然而,在运行 Android 2.3.6 版的设备上, …
我正在尝试创建一个MutableProperty
包含的Results
收件者Realm.objects(_:)
。要创建属性,我需要给它一个初始值。因此是“空” Results
。
我尝试使用创建一个:
var someThings = Results<SomeObject>()
MutableProperty(someThings)
Run Code Online (Sandbox Code Playgroud)
但是,编译器给我的错误:Cannot invoke initializer for type 'Results<SomeObject>' with no arguments
。
虽然我理解该错误,但我不确定如何Results
在此上下文中创建对象。从源头来看,Results
我也找不到init
。
所以我的问题是;我如何创建Results
自己的用在MutableProperty
?
编辑:
我已经看到了这个问题 ……但这并没有真正的帮助(除非我要为MutableProperty或其他东西创建一个“包装器”)。
我试图从数组中的十六进制值创建一个字符串,但是每当数组中的十六进制以零开头时,它也会在结果字符串中消失。
我String(value:radix:uppercase)
用来创建字符串。
一个例子:
这是一个数组:[0x13245678, 0x12345678, 0x12345678, 0x12345678]
.
这给了我字符串:12345678123456781234567812345678
(32 个字符)
但是下面的数组:([0x02345678, 0x12345678, 0x02345678, 0x12345678]
注意我1
用零替换了两个)。
给我字符串:234567812345678234567812345678
(30 个字符)
我不确定为什么它会删除零。我知道这个值是正确的;如果它在那里,我如何格式化它以保持零?
ios ×3
swift ×3
xcode ×2
android ×1
clang ×1
encryption ×1
hex ×1
int ×1
keychain ×1
menuitem ×1
module ×1
objective-c ×1
quick-nimble ×1
realm ×1
string ×1
touch-id ×1
unit-testing ×1