Post

Replies

Boosts

Views

Activity

Reply to Important item in Keychain seems to have disappeared (after years)
I followed up with Apple Support, and unfortunately it sounds like there is nothing I can do here. Well, short of breaking the AES-GCM encryption, to recover my files without the key that I had in keychain. Haha. That's basically hopeless. Maybe I can recover my photos 30 years from know, before I die, using a quantum computer. :) Lesson learned. Master keys need to be backed up in multiple places, or constructed from memorable pass phrases. 🤦‍♂️
Mar ’25
Reply to Important item in Keychain seems to have disappeared (after years)
Yeah, this issue is kind of in the gray area between developer-land and user-land. I hope that doesn't lead to me never getting answer about what happened. I will circle back around with normal tech support again today or tomorrow. Let me try to focus this question on the developer API in the Security framework, and put aside "keychain recovery" for a moment. Because I understand that recovery is a topic that is moving away from developer tech support and into general tech support. I called the function SecItemAdd. I want to know the exact details of that function's contract. I need to know that, to use the function in the best way possible. I thought I was adding to a database, and that the data would be accessible forever via calls to SecItemCopyMatching, unless I called SecItemDelete on the item, or manually deleted it using an app like Keychain Access (which would itself be call SecItemDelete or equivalent). In other words, I imagined SecItemAdd was like SQL insert, and that as long as I didn't do a delete, I'd have my item. Other linked documents suggest this is close, at least, to the reality. But apparently my assumption was wrong. There must be some condition under which a "general password" data item disappears or becomes inaccessible. That condition is part of the contract of these functions, and it's something developers need to know in order to use these functions in a highest quality way. If I can ever understand this, then I could think about possible recovery, if it's even possible, but I'm not even at that stage yet.
Mar ’25
Reply to Important item in Keychain seems to have disappeared (after years)
I have a few sub-questions that would help me narrow down my search. 1. Can I see every item name in login_renamed_1, without unlocking? This could help me skip the large effort I'm expending trying to crack my old password. When I open that old login_renamed_1.keychain-db file in Keychain Access, it appears in the left nav under "Custom Keychains" and it is locked. However, I can still click on it and see the names of the items in the main window area to the right. My lost master key item is not there. Would unlocking it reveal more names, more items? If not, if I can already see the entire content of that keychain, then I don't see a point in continuing my current CPU/GPU-heavy attempts to recover my partially-remembered old laptop password, with the goal of unlocking this keychain. 2. Is the entire data protection keychain in the file keychain-2.db? One of the links you (Quinn) posted says that the data protection keychain is here, but people say "file-based keychain" to refer to the other (non data protection) keychain. This is confusing me, since this looks to be "file based" as well, if it is contained in the SQLite DB in keychain-2.db file? 3. Could the update to Passwords app have deleted or hidden my SecItem? Data migrations are dangerous. At some point after I originally called SecAddItem in late 2020, Apple introduced the Passwords app and passwords seemed to move there. Are there any known issues here with SecItems becoming hidden, or lost? 4. Can I query the names of SecItems in keychain-2.db, using sqlite3? If my item is somehow lost in that database file, I wonder if I might recover it with some manual SQL selects. I can use sqlite3 to view the file contents, but most of the table contents appear... cryptic.
Mar ’25
Reply to Important item in Keychain seems to have disappeared (after years)
Yes, it's on macOS. I'm trying to piece together exactly what code I was running at the time, a few years ago, but I think the code that created the item may have used the data protection keychain, which you mentioned. var query: [String: Any] = [kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: account, kSecUseDataProtectionKeychain as String: true, kSecValueData as String: password] if let label = label { query[kSecAttrLabel as String] = label } let status = SecItemAdd(query as CFDictionary, nil) A quick test suggests that even if I add it like that, the snippet in my original post, with SecItemCopyMatching, finds the item that was created, even though it doesn't have that kSecUseDataProtectionKeychain key in its query. A second piece of info: in ~/Library/Keychains, there is a file named login_renamed_1.keychain-db from 2022. I don't know what creates a file like this, but I wonder if it's from a password reset/change that I did on my MacBook. When I try to open it in Keychain Access, it appears in the left nav, but I don't think it's completely open / searchable, because I can't "unlock" it. It's not accepting my current MacBook password. Does that mean it is locked by my previous MacBook password and might contain the missing password item? If so, it's going to be very difficult for me to remember that password, but maybe not impossible. I almost remember it - it was a certain word or two with a few extra characters thrown in. That might be "crackable", unlike the random 256 bit key I'm trying to find.
Mar ’25
Reply to Bad: OutlineGroup is not lazy loading children?
I created an OutlineView package here: https://github.com/EncodiaDotCo/OutlineView to address this. It's the first time I've created a public github repo for a Swift package, so hopefully it's usable. It's not pretty yet but it lazy loads children. Maybe we can cooperate and improve it. Feel free to create bug/feature requests.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Jul ’22
Reply to linker failing for unit tests in multiplatform project
If it's the same problem I had, it's this: with multiplatform projects, those tests that Xcode creates for you are not unit tests, but "UI Tests". They do not link the same. You need to create more targets if you want to do unit testing. You'll see the Unit Test Bundle choice when you create a new target. I gave mine a similar name to the project template's UI Tests. So now I have "Tests macOS" and "Unit Tests macOS". The first is the UI Test bundle target created by Xcode. The second is my unit testing bundle. Linking works normally in there. .
Jun ’22
Reply to UIScrollView does not give touches to subview if drag starts quickly
My problem was caused by something dumb that I left out of my question, because I was trying to simplify it to post here. My UIScrollView was actually inside a SwiftUI view hierarchy, using UIViewRepresentable. Higher in that view hierarchy, there was a SwiftUI List, which also has scrolling. I had forgotten about that List because I was using it for it's layout appearance, grouping items into sections, but not for its scrolling. Once I got rid of that List, everything worked as expected.
Topic: UI Frameworks SubTopic: UIKit Tags:
Feb ’22