天道酬勤,学无止境

SharkORM Encrypted properties issue in iOS Swift 3

I'm working on iOS project with DB, I am using SharkORM and integrate it to my project using cocoa pods, my project is built using Swift 3.

Everything is working perfectly, but now I need to add encrypted values to the DB and in order to test it I added a very simple code,

I created a "User" class in which I defined a "test" property, this property is of type Double:

dynamic var test: Double = 0;

I also added the following code to the class to define "test" as encrypted property:

override class func encryptedPropertiesForClass() -> [Any]! {
        return ["test"]
}

in order to read/write this property I did the following:

print(User.currentUser.test)
User.currentUser.test = 10
User.currentUser.commit()
print(User.currentUser.test)

Please note that current user is a singleton instance and it is being read from the DB. However, I'm getting the following exception:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SRKEncryptedObject doubleValue]: unrecognized selector sent to instance

Any idea why this is happening? thanks in advance.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • iOS Swift import data from .sql file to existing SQLite database
    I'm using SharkORM in my iOS Swift 3 app, what I'm trying to do is to import data to my SQLite database from a SQL script file, using the function: SharkORM.rawQuery("INSERT INTO `Unit` (Id,name,symbol) VALUES (1,'kg/m²','kg/m²')") However, I'm not able to add any record to my "Unit" table because I'm always getting the following error: unrecognized token: \"\'k/gm²\"" Anyone know why this could be happening? and if there is another way to import .sql file to my database even if not using SharkORM. Thanks in advance.
  • How do I pair and/or bond to BLE on iOS using Swift code and an HM-10 so data sent is encrypted?
    Background I've built a simple circuit which includes an Arduino Nano and a HM-10 BLE serial module. You can see that circuit at the following Electrical Engineering SE question: https://electronics.stackexchange.com/questions/412525/when-i-write-data-to-a-ble-characteristic-ffe1-to-send-data-over-bluetooth-is I also have an Xcode project written in Swift that successfully sends bytes to the FFE1 characteristic. It all works great and I can see the data coming from my iPad via Arduino Serial monitor. However, from the research I did (see previous link) I believe I've determined that the data I
  • 如何在 IOS 和 android 中使用跨平台加密方法(仅限 AES 加密..)?(How do I do a cross platform encryption method working in both IOS and android (AES encryption only..)?)
    问题 我最近被分配了一项任务,即加密我在 swift 中传入 dataTaskWithRequest 的链接和参数。 主要的头痛是它应该产生与 Android 平台相同的输出。 android 团队已经创建了一个使用 spring 解密数据的后端。 java代码是这样的 AESencrp 类 { private static final String ALGO = "AES"; private static final byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'}; public static String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.ENCRYPT_MODE, key); byte[] encVal = c.doFinal(Data.getBytes()); String encryptedValue = new BASE64Encoder().encode(encVal); return
  • SWIFT - 领域数据库加密不起作用(SWIFT - Realm db encryption not working)
    问题 我正在尝试加密存储在领域数据库中的数据。 我遵循了 Realm 的 Swift 页面上提到的示例代码。 我想加密数据而不是数据库文件。 下面是我正在使用的代码: var error: NSError? = nil let configuration = Realm.Configuration(encryptionKey: EncryptionManager().getKey()) if let realmE = Realm(configuration: configuration, error: &error) { // Add an object realmE.write { realmE.add(objects, update: T.primaryKey() != nil) } } 其中对象是我需要插入数据库的对象列表。 下面是同样从示例代码中选取的 getKey() func 的代码: func getKey() -> NSData { // Identifier for our keychain entry - should be unique for your application let keychainIdentifier = "io.Realm.test" let keychainIdentifierData = keychainIdentifier
  • 快速的 AES128 加密(AES128 encryption in swift)
    问题 我有 AES-128 加密的问题。 iOS 中的加密字符串与 Android 不同。 下面是安卓代码: public class Encryption { private static final String ALGORITHM = "AES"; private static final String UNICODE_FORMAT = "UTF8"; public static String encryptValue(String valueToEnc) { try { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGORITHM); c.init(Cipher.ENCRYPT_MODE, key); byte[] encValue = c.doFinal(valueToEnc.getBytes()); String encryptedValue = new Base64().encode(encValue); String urlEncodeddata = URLEncoder.encode(encryptedValue, "UTF-8"); return urlEncodeddata; } catch (Exception e) { } return valueToEnc; } private
  • 未调用 iOS10 UNNotificationServiceExtension(iOS10 UNNotificationServiceExtension not called)
    问题 我正在实施新的 iOS10 扩展以使用丰富的通知。 我试图在推送通知上测试它,但没有用,我只收到一个简单的通知,没有通过扩展。 我做了官方网站和其他一些地方指定的所有内容: 我的应用程序已启动并运行,并带有推送通知和正确的配置文件我向我的应用程序添加了一个新目标,即通知服务扩展实现了我自己的代码(这并不重要,因为甚至没有进入新课程) 此外,我必须为此扩展设置配置文件,我只使用带有通配符的配置文件,我没有看到任何文档指定扩展目标是否必须启用推送通知功能,在这种情况下,我需要为此进行特定的配置一,目前我只使用通配符 prov,无论如何它匹配(它必须匹配)我在应用程序目标中使用的配置文件,并且只为应用程序目标启用推送通知功能。 我添加了 UNNotificationExtensionCategory 和 NSExtensionPointIdentifier。 此外,我将类别作为来自服务器的推送有效负载的一部分发送。 正如我所说,我收到通知但从未通过扩展程序。 我看到操作系统如何尝试加载扩展,但随后抛出一个没有相关描述的错误来识别问题: Dec 31 21:00:00 iPhone SpringBoard(libextension.dylib)[51] <Notice>: calling plugIn beginUsing: Dec 31 21:00:57 iPhone pkd[86
  • 无法发出用于桥接头的预编译头(Failed to emit precompiled header for bridging header)
    问题 我从GitHub下载了一个项目,然后放置了以下文件,其中一些是由OBJ-C编写的,我使用了桥头。 pod ‘SnapKit’ pod ‘MJRefresh’ pod ‘Alamofire’ pod ‘Kingfisher’ pod ‘MBProgressHUD’ pod ‘pop’ pod ‘EVReflection’ pod ‘StreamingKit’ pod ‘iCarousel’ pod ‘ReflectionView’ 当我使用Xcode 9.0 beta 2运行项目时,不幸的是,错误日志如下: 错误:无法发出预编译头文件'/var/folders/kd/4gh0_kxx3jx4thjb_sssmmcw0000gn/T/EvoRadio-Bridging-Header-97bd5f.pch'以桥接头文件'/ Users / ringo / Downloads / EvoRadio-master / EvoRadio / Resources桥接头.h' 我已经用谷歌搜索过,但是没有这样的问题。错误意味着它需要一个PCH文件吗? 这是我的.pch标头配置:无法解决。 怎么做? 回答1 在为加密的核心数据添加可可豆之后,我也遇到了完全相同的问题(Xcode9 beta 6)。 这是我的PodFile : # Uncomment the next line to
  • How do I do a cross platform encryption method working in both IOS and android (AES encryption only..)?
    I have been recently assigned a task of encrypting my links and parameters i pass in dataTaskWithRequest in swift. The main headache is it should produce the same output as Android platform. The android team has already created a backend using spring for decrypting the data. The java code is like this class AESencrp { private static final String ALGO = "AES"; private static final byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'}; public static String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher
  • 如何使用 Spotify SDK 和 Swift 3 正确处理令牌刷新。错误代码 = 3840(How to properly handle token refresh with Spotify SDK and Swift 3. Error Code=3840)
    问题 tl;dr我收到: JSON text did not start with array or object and option to allow fragments not set. 如果我尝试接收令牌并且No refresh token available in the session! 如果我要更新令牌。 我正在尝试在 Swift 3 中为 Objective-C Spotify iOS SDK beta-25 设置令牌刷新。我使用的是 Heroku 服务器和 Spotify 提供的 Ruby 脚本,已更改为我的凭据。 require 'sinatra' require 'net/http' require 'net/https' require 'base64' require 'encrypted_strings' require 'json' CLIENT_ID = ENV['xxx'] CLIENT_SECRET = ENV['xxx'] ENCRYPTION_SECRET = ENV['xxx'] CLIENT_CALLBACK_URL = ENV['xxx://returnafterlogin'] AUTH_HEADER = "Basic " + Base64.strict_encode64(CLIENT_ID + ":" + CLIENT_SECRET)
  • swift3 - 如何保护密钥(swift3 - How to protect secret key)
    问题 我是 iOS swift 3 开发的新手。 现在,我正在做一个需要加密、消息认证码(MAC)和Hashed-base-MAC的项目。 这些算法需要秘密密钥。 我知道对代码中的键进行硬编码是一种不好的做法,例如: let key = "secretkeyabc123" 搜索并阅读了一些文章,例如:在 iOS 中,如何存储允许我与服务器通信的秘密“密钥”? 由于其他人可能会执行逆向工程,我正在寻找一种方法来保护我的密钥。 要求: 没有散​​列密钥。 时间允许破解它,或者使用哈希表和字典可能无法上网(我的应用程序。是一个离线应用程序。如果您的回答需要连接到互联网。是的,请指出。我会考虑的) 它是一个静态密钥。 它可能每月更改它是一个对称键。 欢迎提供代码、概念或其他内容。 谢谢! 回答1 根本不要存储密钥。 执行 Diffie-Hellman 密钥交换以启动非对称加密通道,并使用此通道将对称密钥发送到客户端,供后续客户端使用。 回答2 检查 iCloud 钥匙串(基于您的标签 [ios]、[swift]、[key])。 它作为一个安全的数据库,允许安全地存储信息,包括用户的网站登录密码、Wi-Fi 网络密码、信用卡/借记卡管理(尽管没有 CVV)和其他帐户数据,以便快速访问和自动填写当用户需要即时访问网页和其他地方时。 它们始终使用 256 位 AES 加密进行加密存储
  • swift3 - 如何保护密钥(swift3 - How to protect secret key)
    问题 我是 iOS swift 3 开发的新手。 现在,我正在做一个需要加密、消息认证码(MAC)和Hashed-base-MAC的项目。 这些算法需要秘密密钥。 我知道对代码中的键进行硬编码是一种不好的做法,例如: let key = "secretkeyabc123" 搜索并阅读了一些文章,例如:在 iOS 中,如何存储允许我与服务器通信的秘密“密钥”? 由于其他人可能会执行逆向工程,我正在寻找一种方法来保护我的密钥。 要求: 没有散​​列密钥。 时间允许破解它,或者使用哈希表和字典可能无法上网(我的应用程序。是一个离线应用程序。如果您的回答需要连接到互联网。是的,请指出。我会考虑的) 它是一个静态密钥。 它可能每月更改它是一个对称键。 欢迎提供代码、概念或其他内容。 谢谢! 回答1 根本不要存储密钥。 执行 Diffie-Hellman 密钥交换以启动非对称加密通道,并使用此通道将对称密钥发送到客户端,供后续客户端使用。 回答2 检查 iCloud 钥匙串(基于您的标签 [ios]、[swift]、[key])。 它作为一个安全的数据库,允许安全地存储信息,包括用户的网站登录密码、Wi-Fi 网络密码、信用卡/借记卡管理(尽管没有 CVV)和其他帐户数据,以便快速访问和自动填写当用户需要即时访问网页和其他地方时。 它们始终使用 256 位 AES 加密进行加密存储
  • 与目标 C 相比,Swift SHA256 加密返回不同的加密字符串(Swift SHA256 encryption returns different encrypted string compare to Objective C)
    问题 我正在将一些代码从目标 c 迁移到 swift。 我想在 swift 中使用 SHA 256 算法使用密钥加密字符串。 但是与 Objective C 实现相比,swift 代码返回不同的加密字符串。 两个代码看起来一样,只是语法不同。 有人可以帮助我快速获得与过去在 Objective C 中相同的结果吗? 以下是两种语言的代码示例。 目标 C: NSString* key = @"1234567890123456789012345678901234567890123456789012345678901234"; const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [@"message" cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *hash = [[NSData alloc] initWithBytes:cHMAC length:sizeof
  • 当类包含数组时,Swift 3 枚举会泄漏内存(Swift 3 enums leak memory when the class contains an array)
    问题 我在 Swift 中发现了内存泄漏。 它让我做噩梦,因为我的代码到处都是小漏洞,然后我设法将其简化为这个小例子, import UIKit enum LeakingEnum { case LeakCase, AnotherLeakCase } class Primitive { var lightingType: LeakingEnum = .LeakCase var mysub : [Int] = [] init() { mysub.append(80) } } class ViewController: UIViewController { var prim: Primitive? override func viewDidLoad() { super.viewDidLoad() prim = Primitive() } } 如果你在 iPhone 和 Profile with Instruments 上运行这个程序,你会在Array._copyToNewBuffer发现这个泄漏, 如果我删除对mysub.append的调用,它就会停止泄漏。 如果我从Primitive删除枚举,它也会停止泄漏。 我有这样的枚举泄漏的所有类。 Swift 枚举是怎么回事? 在 iPhone6 和 iPad Pro 上在 Swift 3、Xcode 8.2.1 和 iOS 10.2 中重现。
  • How to properly handle token refresh with Spotify SDK and Swift 3. Error Code=3840
    tl;dr I'm receiving: JSON text did not start with array or object and option to allow fragments not set. if i'm trying to receive a token and No refresh token available in the session! if I'm trying to renew a token. I'm trying to setup the token refresh for the Objective-C Spotify iOS SDK beta-25 in Swift 3. I'm using a Heroku Server and the Ruby script provided by Spotify, changed to my credentials. require 'sinatra' require 'net/http' require 'net/https' require 'base64' require 'encrypted_strings' require 'json' CLIENT_ID = ENV['xxx'] CLIENT_SECRET = ENV['xxx'] ENCRYPTION_SECRET = ENV['xxx
  • 在Swift中使用CCCrypt(CommonCrypt)的问题(Issue using CCCrypt (CommonCrypt) in Swift)
    问题 我正在将工作中的Objective-C类别(NSData + AESCrypt.m)移植到Swift,发现使用指针存在问题。 Swift中加密部分的代码可以正确编译,但是会生成运行时EXEC_BAD_ACCES错误。 到目前为止,我的代码是(我试图尽可能地剖析代码): let key = "123456789012345678901234567890120" let keyLength = UInt(kCCKeySizeAES256 + 1) let keyPointer = strdup(key) // Convert key to <UnsafeMutablePointer<Int8> let message = "Don´t try to read this text. Top Secret Stuff" let data = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) let dataBytes = data?.bytes let length = data?.length let dataLength = UInt(length!) let dataPointer = UnsafePointer<UInt8>(dataBytes!) let operation: CCOperation
  • RLMException: '主键属性 'serial' 不存在于对象 'Book' 迁移到 Swift 4(RLMException: 'Primary key property 'serial' does not exist on object 'Book' Migrating to Swift 4)
    问题 我在使用 Swift 4 编译的 iOS 上的 Realm 遇到了这个问题,在启动时应用程序崩溃并显示以下消息 RLMException', reason: 'Primary key property 'serial' does not exist on object 'Book'' 我看到了类似的错误消息,但不是同一个。 这就是我的对象的样子 import Foundation import RealmSwift class Book: Object { dynamic var serial: String = "" dynamic var title: String = "" dynamic var pages: Int = 0 dynamic var genre: String = "" override static func primaryKey() -> String? { return "serial" } } 当我通过 Realm Browser 应用程序检查 default.realm 文件时,我注意到条目只有一个 # (0,1,2) 而没有数据。 如果我注释掉主键,它会运行,但 Realm 中不会为该对象存储任何内容。 不知道为什么会崩溃! 回答1 尽管不一定与迁移有关,但 iOS 13 和 Xcode 11 存在问题,可能会导致此问题。
  • 带有 XCode 8 GM 的 iOS 10 导致 NSUserDefaults 间歇性不起作用(iOS 10 with XCode 8 GM caused NSUserDefaults to intermittently not work)
    问题 注:我看到的堆栈溢出许多其他职位约NSUserDefaults被重命名为UserDefaults斯威夫特与否模拟器上工作,直到重新启动。 无论如何,这不是重复的。 SO 标记的许多问题都来自 4 年前。 我的问题是针对今年的 iOS 10 的,因为这在旧版本中一直有效。 我已经在我的问题中提到我的问题不是那些问题的重复,因为那些是 swift 中的模拟器错误,而我的问题是设备目标 C 错误。 请在标记为重复之前阅读问题 我的问题是不同的,因为我能够在目标 C 和物理设备本身上重现这一点。 我为这个测试从头开始创建了一个全新的项目。 我将此代码放在视图控制器的viewDidLoad中: if (![[NSUserDefaults standardUserDefaults] valueForKey:@"checkIfInitialized"]){ NSLog(@"setting checkIfInitialized as not exist"); [[NSUserDefaults standardUserDefaults] setValue:@"test" forKey:@"checkIfInitialized"]; [[NSUserDefaults standardUserDefaults] synchronize]; self.view.backgroundColor=
  • iOS 11 更喜欢大标题直到滚动才更新(iOS 11 prefersLargeTitles not updating until scroll)
    问题 我使用包装在 UINavigationController 中的 UITableView 实现了一个基本的 UIViewController。 我将prefersLargeTitles设置为 true: override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. navigationController?.navigationBar.prefersLargeTitles = true navigationItem.title = "Coffees" } 但是,标题一直很小,直到我滚动视图,此时它会放大。 我尝试将该调用移动到我创建 UINavigationController 的位置,但没有任何效果。 我确定当我设置prefersLargeTitles时, navigationController 不是 nil 。 我应该在其他地方更新该属性吗? 还是我应该提交雷达? 更新: 这似乎只发生在我的视图包含UITableView或它本身是一个UITableViewController 回答1 我有同样的问题。 虽然您没有使用故事板,但我希望这可以帮助某人。 我检查了嵌入
  • Swift 3.1 - NSAttributedString 中的 NSSuperScript 没有按预期工作(Swift 3.1 - NSSuperScript in NSAttributedString not working as expected)
    问题 我正在处理的应用程序在通过 XCode 8.3 beta 2 使用 iOS 10.3 Simulator 进行测试时遇到问题,其中 AttributedString 中的上标与普通文本显示在同一行。 对于 iOS 10.2.x 及更低版本,它可以正确显示。 iOS 10.3 截图:https://www.dropbox.com/s/p5v71g722cg5qhy/Screen%20Shot%202017-02-21%20at%2010.24.21%20AM.png?dl=0 iOS 10.2.x 及以下截图:https://www.dropbox.com/s/lcfsic6xyz953qp/Scr​​een%20Shot%202017-02-21%20at%2010.19.17%20AM.png?dl=0 这是我处理文本的方式: 最初,字符串是 HTML 格式,并标记上面的文本“8,9” <html> <head> <style> body { color: #554344 ; font-family: \'MyCustomFont\'; font-size: 18px; } sup { font-size: 13px; } </style> </head> <body> ABCdef<sup>1,2,3,8,9</sup> </body> </html> 然后使用以下脚本将
  • SWIFT - Realm db encryption not working
    Im trying to encrypt the data stored in the realm database. I followed the Sample Code mentioned on Realm's Swift page. I want to encrypt the data NOT the database file. Below is the code I'm using: var error: NSError? = nil let configuration = Realm.Configuration(encryptionKey: EncryptionManager().getKey()) if let realmE = Realm(configuration: configuration, error: &error) { // Add an object realmE.write { realmE.add(objects, update: T.primaryKey() != nil) } } Where objects is a list of objects i need to insert in the database. Below is the code fore getKey() func also picked from the sample