Closed jfgates closed 6 years ago
Hi, Could you tell me what type the UserInfo.userinfo field is? Is it an other UserInfo object. Cloudkit cannot handle sub objects very well. It could be that se (de)serialization is not going right for this. I think that it could be that the field is set with a property of a type that's not equal to the type it should be. For instance a dictionary was assigned to the property instead of an object. But then your asserts are still strange.
Hi,
I ought to have added this info in the first place. I did some experiments but had the same results.
UserInfo has the following declarations. I’ve left out the methods, for simplicity. I just ran this with var reverseColour and following commented out and had the same results. Those properties were just added and I thought that the jsonSerialization might have been confused. So, with or without the new properties the problem occurs.
ASDataObject just has var active = 1 ASData is a large protocol that provides functionality to all my EVCloudKit data objects. So confusion might lie there. Not sure how to test that except make a throwaway class that only has some properties and without the ASData protocol and run a unit test against it.
My feeling now is that this may be an Apple thing. I’d think that XCTAssetNotNil and XCTAssertNil should not (de)serialize anything; I’d think it would only test if the reference pointer is nil or not nil. Obviously, I am wrong.
Below the source are the errors. The first refers to the binary of the object and three refer to CKRecordID: Unexpected type while converting value for JsonSerialization: <CKRecordID
Hope this helps.
Joseph
A unit test that has the failures: func testInitPreferences () { let ui = UserInfo.readObjectFromDocuments ( ) as? UserInfo XCTAssert ( ui != nil ) UserInfo.userinfo = ui let xctexpectation = expectation ( description: "initPreferences.setupPreferences" ) let _ = UserInfo.setupPreferences () { ui, error in XCTAssertNil ( error ) XCTAssertNotNil ( ui ) XCTAssert ( UserInfo.userinfo!.json.length > 0 ) XCTAssert ( UserInfo.preferences.count > 0 ) xctexpectation.fulfill () return true } waitForExpectations ( timeout: 60 ) { error in if let error = error { print ( "Error: ( error.localizedDescription )") } } }
And the same test that works. func testGetUserInfo () { let xctexpectation = expectation ( description: "getUserInfo" ) UserInfo.getUserInfo { ui, error in XCTAssert ( ui != nil ) XCTAssert ( UserInfo.userinfo != nil ) xctexpectation.fulfill () } waitForExpectations ( timeout: 60 ) { error in if let error = error { print ( "Error: ( error.localizedDescription )") }
}
XCTAssert ( UserInfo.userinfo != nil )
UserInfo.userinfo = UserInfo.readObjectFromDocuments ( ) as? UserInfo
XCTAssert ( UserInfo.userinfo != nil )
}
The UserInfo class
class UserInfo : ASDataObject, ASData { static var preferences = Dictionary< String, Any? > () static var userinfo : UserInfo? static var userid = "" static var isLoggedIn = false
// reverse button red (1) or clear (0)
var buttonReverseColour = 1
// reverse button one right (0) or left (1)
var buttonReverseLeft = 1
// hide messages textfield
var hideMessages = 0
// non-indexed preferences stored here (now)
var json = ""
// lives per game
var lives = 3.0
// play randomly is an enum for randomly for all lives, randomly for games, or single profile
var playRandomly = 8
// play style == game profile
var playStyle = 20
var preferredLanguage = "en"
// schema version
var revision = 1.0
// times played (for all games)
var timesPlayed = 0
// unecessary now....
var userId = ""
var reverseColour : Int
{
get
{
let buttonReverseColour = UserInfo.preferences [ "buttonReverseColour" ]
guard buttonReverseColour != nil else { return 1 }
return buttonReverseColour! as! Int
}
set ( newValue )
{
UserInfo.preferences [ "buttonReverseColour" ] = newValue
UserInfo.updatePreferences ()
}
}
var reverseLeft : Int
{
get
{
let buttonReverseLeft = UserInfo.preferences [ "buttonReverseLeft" ]
guard buttonReverseLeft != nil else { return 1 }
return buttonReverseLeft! as! Int
}
set ( newValue )
{
UserInfo.preferences [ "buttonReverseLeft" ] = newValue
UserInfo.updatePreferences ()
}
}
var showMessages : Int
{
get
{
let hide = UserInfo.preferences [ "hideMessages" ]
guard hide != nil else { return 1 }
return hide! as! Int
}
set ( newValue )
{
UserInfo.preferences [ "hideMessages" ] = newValue
UserInfo.updatePreferences ()
}
}
var newLives : Double
{
get
{
let lives = UserInfo.preferences [ "lives" ]
guard lives != nil else { return 3 }
return lives! as! Double
}
set ( newValue )
{
UserInfo.preferences [ "lives" ] = newValue
UserInfo.updatePreferences ()
}
}
var randomPlay : Int
{
get
{
let playRandomly = UserInfo.preferences [ "playRandomly" ]
guard playRandomly != nil else { return 8 }
return playRandomly! as! Int
}
set ( newValue )
{
UserInfo.preferences [ "playRandomly" ] = newValue
UserInfo.updatePreferences ()
}
}
var gameStyle : Int
{
get
{
let hide = UserInfo.preferences [ "playStyle" ]
guard hide != nil else { return 1 }
return hide! as! Int
}
set ( newValue )
{
UserInfo.preferences [ "playStyle" ] = newValue
UserInfo.updatePreferences ()
}
}
var language : String
{
get
{
let lang = UserInfo.preferences [ "preferredLanguage" ]
guard lang != nil else { return "en" }
return lang! as! String
}
set ( newValue )
{
UserInfo.preferences [ "preferredLanguage" ] = newValue
UserInfo.updatePreferences ()
}
}
var revi : Double
{
get
{
let revision = UserInfo.preferences [ "revision" ]
guard revision != nil else { return 1.0 }
return revision! as! Double
}
set ( schema )
{
UserInfo.preferences [ "revision" ] = schema
UserInfo.updatePreferences ()
}
}
var played : Int
{
get
{
let hide = UserInfo.preferences [ "timesPlayed" ]
guard hide != nil else { return 0 }
return hide! as! Int
}
set ( newValue )
{
let times = timesPlayed
UserInfo.preferences [ "timesPlayed" ] = times + 1
UserInfo.updatePreferences ()
}
}
// used to display global leaderboards
fileprivate class func updatePreferences ( )
{
guard setPreference () == true else { return }
getUserInfo
{
usi, error in
guard error == nil else { return }
guard usi != nil else { return }
save (
item: usi!,
updateClosure:
{
( ) in
},
completionClosure:
{
_, _ in
saveObjectToDocuments ( usi!, fileName: getCacheName ())
})
}
}
class func setPreference ( ) -> Bool
{
guard let data = try? JSONSerialization.data ( withJSONObject: preferences, options: [] ) else { return false }
userinfo?.json = String ( data: data, encoding: .utf8 )!
guard GameViewController.userid.length > 0 else { return false }
// user is logged in?
guard GameViewController.userLoggedIn == false else { return true }
// save most current version to disk because icloud isn't available
saveObjectToDocuments ( userinfo!, fileName: getCacheName())
return false
}
🌀 ERROR: Unexpected type while converting value for JsonSerialization: <62706c69 73743030 d4010203 0405063a 3b582476 65727369 6f6e5824 6f626a65 63747359 24617263 68697665 72542474 6f701200 0186a0af 10120708 09101117 18192024 282b2e32 33373839 55246e75 6c6c5855 73657249 6e666fd3 0a0b0c0d 0e0f5624 636c6173 735a5265 636f7264 4e616d65 565a6f6e 65494480 08800380 045f1024 42344536 31374135 2d443539 362d3434 34322d38 4637412d 33383842 44434135 38443132 d312130a 14151658 5a6f6e65 4e616d65 596f776e 65724e61 6d658005 80068007 5c5f6465 6661756c 745a6f6e 655f1010 5f5f6465 6661756c 744f776e 65725f5f d21a1b1c 1d5a2463 6c617373 6e616d65 5824636c 61737365 735e434b 5265636f 72645a6f 6e654944 a21e1f5e 434b5265 636f7264 5a6f6e65 4944584e 534f626a 656374d2 1a1b2122 5a434b52 65636f72 644944a2 231f5a43 4b526563 6f726449 44d2250a 2627574e 532e7469 6d652341 bfff0031 3851ec80 0ad21a1b 292a564e 53446174 65a2291f d2250a2c 272341c0 3e967823 b646800a d30a0b0c 0d300f80 08800d80 045f1010 5f5f6465 6661756c 744f776e 65725f5f d30a0b0c 0d350f80 08800f80 045f1010 5f5f6465 6661756c 744f776e 65725f5f 6f101900 4a006f00 73006500 70006800 20004700 61007400 65007320 19007300 20006900 50006800 6f006e00 65002000 36005300 2b586a63 31367872 6c315f10 0f4e534b 65796564 41726368 69766572 df10253c 3d3e3f40 41424344 45464748 494a4b4c 4d4e4f50 51525354 55565758 595a5b5c 5d5e5f60 61626164 61626761 61616161 6d6e6161 61616174 61766162 6161617c 7d626162 61828362 615f1016 546f6d62 73746f6e 65645075 626c6963 4b657949 44735f10 19486173 55706461 74656450 6172656e 74526566 6572656e 63655f10 13436861 696e5072 6f746563 74696f6e 44617461 5d4b6e6f 776e546f 53657276 65725942 61736554 6f6b656e 5f101057 616e7473 43686169 6e504353 4b65795b 5265636f 72644374 696d655a 526f7574 696e674b 65795f10 1250726f 74656374 696f6e44 61746145 7461675f 10265072 6576696f 75735072 6f746563 74696f6e 44617461 45746167 46726f6d 556e6974 54657374 5f101243 6f6e666c 6963744c 6f736572 45746167 735f101a 50726576 696f7573 50726f74 65637469 6f6e4461 74614574 61675a52 65636f72 64547970 655f1013 43726561 746f7255 73657252 65636f72 6449445f 100f5061 72656e74 52656665 72656e63 65595368 61726545 74616758 5043534b 65794944 5c5a6f6e 65697368 4b657949 445f1020 4d757461 626c6545 6e637279 70746564 5075626c 69635368 6172696e 674b6579 54455461 675f1016 50726576 696f7573 53686172 65526566 6572656e 63655f10 104d6f64 69666965 64427944 65766963 655e5072 6f746563 74696f6e 44617461 5f101155 73654c69 67687477 65696768 74504353 5e536861 72655265 66657265 6e636553 55524c5f 10164368 61696e50 6172656e 74507562 6c69634b 65794944 5f10184c 6173744d 6f646966 69656455 73657252 65636f72 6449445b 5265636f 72644d74 696d655f 10155761 6e747350 75626c69 63536861 72696e67 4b65795f 10165a6f 6e655072 6f746563 74696f6e 44617461 45746167 59576173 43616368 65645f10 0f436861 696e5072 69766174 654b6579 5a506572 6d697373 696f6e58 5265636f 72644944 5f101848 61735570 64617465 64536861 72655265 66657265 6e63655f 10175072 6576696f 75735061 72656e74 52656665 72656e63 65800008 80000980 00088009 80008000 80008000 80008001 800c8000 80008000 80008000 80118000 80108000 08800080 00800080 0e800b08 80000880 00100180 02088000 00080011 001a0023 002d0032 0037004c 0052005b 00620069 0074007b 007d007f 008100a8 00af00b8 00c200c4 00c600c8 00d500e8 00ed00f8 01010110 01130122 012b0130 013b013e 0149014e 0156015f 01610166 016d0170 0175017e 01800187 0189018b 018d01a0 01a701a9 01ab01ad 01c001f5 01fe0210 025d0276 029202a8 02b602c0 02d302df 02ea02ff 0328033d 035a0365 037b038d 039703a0 03ad03d0 03d503ee 04010410 04240433 04370450 046b0477 048f04a8 04b204c4 04cf04d8 04f3050d 050f0510 05120513 05150516 0518051a 051c051e 05200522 05240526 0528052a 052c052e 05300532 05340536 05380539 053b053d 053f0541 05430544 05460547 0549054b 054d054e 00000000 00000201 00000000 00000086 00000000 00000000 00000000 00000550> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c44248c0; recordName=defaultOwner, zoneID=_defaultZone:defaultOwner> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c44248e0; recordName=B4E617A5-D596-4442-8F7A-388BDCA58D12, zoneID=_defaultZone:defaultOwner> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c4424940; recordName=defaultOwner, zoneID=_defaultZone:defaultOwner> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <62706c69 73743030 d4010203 0405063a 3b582476 65727369 6f6e5824 6f626a65 63747359 24617263 68697665 72542474 6f701200 0186a0af 10120708 09101117 18192024 282b2e32 33373839 55246e75 6c6c5855 73657249 6e666fd3 0a0b0c0d 0e0f5624 636c6173 735a5265 636f7264 4e616d65 565a6f6e 65494480 08800380 045f1024 42344536 31374135 2d443539 362d3434 34322d38 4637412d 33383842 44434135 38443132 d312130a 14151658 5a6f6e65 4e616d65 596f776e 65724e61 6d658005 80068007 5c5f6465 6661756c 745a6f6e 655f1010 5f5f6465 6661756c 744f776e 65725f5f d21a1b1c 1d5a2463 6c617373 6e616d65 5824636c 61737365 735e434b 5265636f 72645a6f 6e654944 a21e1f5e 434b5265 636f7264 5a6f6e65 4944584e 534f626a 656374d2 1a1b2122 5a434b52 65636f72 644944a2 231f5a43 4b526563 6f726449 44d2250a 2627574e 532e7469 6d652341 bfff0031 3851ec80 0ad21a1b 292a564e 53446174 65a2291f d2250a2c 272341c0 3e967823 b646800a d30a0b0c 0d300f80 08800d80 045f1010 5f5f6465 6661756c 744f776e 65725f5f d30a0b0c 0d350f80 08800f80 045f1010 5f5f6465 6661756c 744f776e 65725f5f 6f101900 4a006f00 73006500 70006800 20004700 61007400 65007320 19007300 20006900 50006800 6f006e00 65002000 36005300 2b586a63 31367872 6c315f10 0f4e534b 65796564 41726368 69766572 df10253c 3d3e3f40 41424344 45464748 494a4b4c 4d4e4f50 51525354 55565758 595a5b5c 5d5e5f60 61626164 61626761 61616161 6d6e6161 61616174 61766162 6161617c 7d626162 61828362 615f1016 546f6d62 73746f6e 65645075 626c6963 4b657949 44735f10 19486173 55706461 74656450 6172656e 74526566 6572656e 63655f10 13436861 696e5072 6f746563 74696f6e 44617461 5d4b6e6f 776e546f 53657276 65725942 61736554 6f6b656e 5f101057 616e7473 43686169 6e504353 4b65795b 5265636f 72644374 696d655a 526f7574 696e674b 65795f10 1250726f 74656374 696f6e44 61746145 7461675f 10265072 6576696f 75735072 6f746563 74696f6e 44617461 45746167 46726f6d 556e6974 54657374 5f101243 6f6e666c 6963744c 6f736572 45746167 735f101a 50726576 696f7573 50726f74 65637469 6f6e4461 74614574 61675a52 65636f72 64547970 655f1013 43726561 746f7255 73657252 65636f72 6449445f 100f5061 72656e74 52656665 72656e63 65595368 61726545 74616758 5043534b 65794944 5c5a6f6e 65697368 4b657949 445f1020 4d757461 626c6545 6e637279 70746564 5075626c 69635368 6172696e 674b6579 54455461 675f1016 50726576 696f7573 53686172 65526566 6572656e 63655f10 104d6f64 69666965 64427944 65766963 655e5072 6f746563 74696f6e 44617461 5f101155 73654c69 67687477 65696768 74504353 5e536861 72655265 66657265 6e636553 55524c5f 10164368 61696e50 6172656e 74507562 6c69634b 65794944 5f10184c 6173744d 6f646966 69656455 73657252 65636f72 6449445b 5265636f 72644d74 696d655f 10155761 6e747350 75626c69 63536861 72696e67 4b65795f 10165a6f 6e655072 6f746563 74696f6e 44617461 45746167 59576173 43616368 65645f10 0f436861 696e5072 69766174 654b6579 5a506572 6d697373 696f6e58 5265636f 72644944 5f101848 61735570 64617465 64536861 72655265 66657265 6e63655f 10175072 6576696f 75735061 72656e74 52656665 72656e63 65800008 80000980 00088009 80008000 80008000 80008001 800c8000 80008000 80008000 80118000 80108000 08800080 00800080 0e800b08 80000880 00100180 02088000 00080011 001a0023 002d0032 0037004c 0052005b 00620069 0074007b 007d007f 008100a8 00af00b8 00c200c4 00c600c8 00d500e8 00ed00f8 01010110 01130122 012b0130 013b013e 0149014e 0156015f 01610166 016d0170 0175017e 01800187 0189018b 018d01a0 01a701a9 01ab01ad 01c001f5 01fe0210 025d0276 029202a8 02b602c0 02d302df 02ea02ff 0328033d 035a0365 037b038d 039703a0 03ad03d0 03d503ee 04010410 04240433 04370450 046b0477 048f04a8 04b204c4 04cf04d8 04f3050d 050f0510 05120513 05150516 0518051a 051c051e 05200522 05240526 0528052a 052c052e 05300532 05340536 05380539 053b053d 053f0541 05430544 05460547 0549054b 054d054e 00000000 00000201 00000000 00000086 00000000 00000000 00000000 00000550> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c44248c0; recordName=defaultOwner, zoneID=_defaultZone:defaultOwner> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c44248e0; recordName=B4E617A5-D596-4442-8F7A-388BDCA58D12, zoneID=_defaultZone:defaultOwner> 🌀 ERROR: Unexpected type while converting value for JsonSerialization: <CKRecordID: 0x1c4424940; recordName=defaultOwner, zoneID=_defaultZone:defaultOwner> (lldb)
On Apr 11, 2018, at 12:09 AM, Edwin Vermeer notifications@github.com wrote:
Hi, Could you tell me what type the UserInfo.userinfo field is? Is it an other UserInfo object. Cloudkit cannot handle sub objects very well. It could be that se (de)serialization is not going right for this. I think that it could be that the field is set with a property of a type that's not equal to the type it should be. For instance a dictionary was assigned to the property instead of an object. But then your asserts are still strange.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/evermeer/EVReflection/issues/279#issuecomment-380328861, or mute the thread https://github.com/notifications/unsubscribe-auth/AZ5mbagq3aY9c_s1L2F81zFyPR2OkN4aks5tnY_tgaJpZM4TOmcA.
Could you tell me what version of EVReflection that you are using? The current version is 5.6.0 It has an extension for CKRecordID that implement a custom reflection that was added in version 5.5.0. I hope that's the reason why the CKRecordID serialization fails. I also have seen that big data dump before. I thought I also fixed that in that 5.5.0 version. It had something to do with the CKRecord system fields that you don't want in your json but which are part of the CKDataObject object
ugh, I didn’t realize I was that far out of date….
EVReflection 5.2.1 EVCloudKitDao 3.4.0
I had waited early on to update because not all the dependencies were ready for Swift4, so I paused at Swift3. Forgot to update since then. I’ll update my pods in the morning and let you know how that went.
On Apr 11, 2018, at 11:44 PM, Edwin Vermeer notifications@github.com wrote:
Could you tell me what version of EVReflection that you are using? The current version is 5.6.0 It has an extension for CKRecordID that implement a custom reflection that was added in version 5.5.0. I hope that's the reason why the CKRecordID serialization fails. I also have seen that big data dump before. I thought I also fixed that in that 5.5.0 version. It had something to do with the CKRecord system fields that you don't want in your json but which are part of the CKDataObject object
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/evermeer/EVReflection/issues/279#issuecomment-380676471, or mute the thread https://github.com/notifications/unsubscribe-auth/AZ5mbVKpcHEbeVNuEbYCPqj672D7rSBdks5tntulgaJpZM4TOmcA.
Hi,
Now running with
Using EVCloudKitDao (3.5.1) Using EVReflection (5.6.0)
Testing worked fine with XCTAssertNotNil et al. Thanks for your help!
I did find another issue. You may want me to add it to the issue tracker for EVCloudKitDao.
What happens is that the app fails to complete start up. I tracked it to this in EVCloudKitDao.swift
/**
Set or reset the quick reference to the container and database
- parameter containerIdentifier: Passing on the name of the container
*/
open func initializeDatabase(_ containerIdentifier: String? = nil) {
let pathDir = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
if pathDir.count > 0 {
fileDirectory = pathDir[0] as NSString!
} else {
fileDirectory = ""
}
filemanager = FileManager.default
ioQueue = DispatchQueue(label: "NL.EVICT.CloudKit.ioQueue", attributes: []) as DispatchQueue
if let identifier = containerIdentifier {
container = CKContainer(identifier: identifier)
} else {
container = CKContainer.default()
}
if self.isType == .isPublic {
database = container.publicCloudDatabase
} else {
database = container.privateCloudDatabase
}
let sema = DispatchSemaphore(value: 0)
container.accountStatus(completionHandler: {status, error in
if error != nil {
EVLog("Error: Initialising EVCloudKitDao - accountStatusWithCompletionHandler.\n\(error!.localizedDescription)")
} else {
self.accountStatus = status
}
EVLog("Account status = \(status.hashValue) (0=CouldNotDetermine/1=Available/2=Restricted/3=NoAccount)")
sema.signal()
})
// let _ = sema.wait(timeout: DispatchTime.distantFuture) //???!!! EVLog("Container identifier = (container.containerIdentifier.debugDescription)") }
The second to last statement is let _ = sema.wait(timeout: DispatchTime.distantFuture) //???!!!
It waits on the semaphore forever. I commented it out and everything runs as expected. Any suggestions on what I might have or have not done that would cause the wait forever? I’m sure that your other users would have reported this before now if it were a common mistake. I checked the open/closed issues bur haven’t seen anything related.
Let me know how I can help, and thanks again for your help,
Joseph Gates fgates@me.com mailto:fgates@me.com
On Apr 12, 2018, at 1:16 AM, Joseph Gates fgates@me.com wrote:
ugh, I didn’t realize I was that far out of date….
EVReflection 5.2.1 EVCloudKitDao 3.4.0
I had waited early on to update because not all the dependencies were ready for Swift4, so I paused at Swift3. Forgot to update since then. I’ll update my pods in the morning and let you know how that went.
On Apr 11, 2018, at 11:44 PM, Edwin Vermeer <notifications@github.com mailto:notifications@github.com> wrote:
Could you tell me what version of EVReflection that you are using? The current version is 5.6.0 It has an extension for CKRecordID that implement a custom reflection that was added in version 5.5.0. I hope that's the reason why the CKRecordID serialization fails. I also have seen that big data dump before. I thought I also fixed that in that 5.5.0 version. It had something to do with the CKRecord system fields that you don't want in your json but which are part of the CKDataObject object
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/evermeer/EVReflection/issues/279#issuecomment-380676471, or mute the thread https://github.com/notifications/unsubscribe-auth/AZ5mbVKpcHEbeVNuEbYCPqj672D7rSBdks5tntulgaJpZM4TOmcA.
Thanks, I will create a EVCloudKit issue for this. I'm not sure why I used a semi back then instead of letting it over to the user in a async callback...
Issue is created: https://github.com/evermeer/EVCloudKitDao/issues/101
Hi,
Not sure if this email still works; I got this when you were assisting me with an issue on 12.April.18.
Just in case it does work, I am building a framework that uses EVCloudKit and EVReclection/CloudKit. I used CocoaPods to obtain the code. But when I built the project I had 32 Issues with EVCloudKit. It appears that it was not updated to Swift 5. Am I grabbing old code?
Here’s my Podfile:
source 'https://github.com/CocoaPods/Specs.git' use_frameworks! workspace ‘Cloud-Data'
def libraries pod 'EVReflection/CloudKit' pod 'EVCloudKitDao'
pod 'AsyncSwift'
pod 'KeychainAccess'
end
target 'Cloud-Data' do project 'Cloud-Data' platform :ios, '12.0' libraries end
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ENABLE_BITCODE'] = 'NO' end end end
Best regards,
Joseph Gates fgates@me.com
@jfgates It's right, there are a lot of code change needed for Swift 5.0 I tried it some time ago but then it costed too much time to fix. I will try again later this week.
@jfgates I just started over and noticed the auto conversion caused a lot of errors. After manually doing the conversion from scratch the problems where quickly solved. The Swift 5.0 version is now pushed to GitHub and Cocoapods as version 3.6.1
Thank you again for your project and how quickly you responded. EVCloudKit is a lifesaver!!
Sent from my iPad
On Apr 17, 2019, at 1:17 AM, Edwin Vermeer notifications@github.com wrote:
@jfgates I just started over and noticed the auto conversion caused a lot of errors. After manually doing the conversion from scratch the problems where quickly solved. The Swift 5.0 version is now pushed to GitHub and Cocoapods as version 3.6.1
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
Hi,
Really love your toolkits... Thanks for your work on these!
I am having the same issue as the previous guy with JSON Serialization. ( peterdk opened this issue on Aug 19, 2017 )
I placed a breakpoint on:
and discovered that it was occurring in my test cases on :
and XCTAssertNotNil ( UserInfo.userinfo )
but is fine for XCTAssert ( UserInfo.userinfo != nil ) and XCTAssert ( UserInfo.userinfo == nil )
Go figure.... I don't need a fix for these as I have a workaround. But thought you'd like to know.
Let me know if you need more info.
Joseph Gates fgates@me.com