Post

Replies

Boosts

Views

Activity

Need help on Array and API design
I am working on an app which I plan to submit to App Store in 2 weeks. Now I have a headache with Array type. I have the following API design in my app: class SomeParser { func getTranslations(_ locale: String) -> [TranslationUnit]? { // Check if the locale units are already in a cache, if not build a new list // and return the list } } class MainVC { func doTranslation() { var list = parser.getTranslation("en") // Modify some units in the list. // How to put it back to cache? } } Now the problem is that since Array is a value type, the modified list is isolated. The only way to reflect the changes into cache is put the modified list back to cache: translationCache[locale] = modifiedList But this is counter-intuitive and waste of performance. Is there anyway to workaround this problem?
1
0
417
Oct ’23
Weird error with HTTPS connection
I have a weird problem with HTTPS connection. Task <A19A5441-F5CD-4F8C-8C88-73FC679D8AE0>.<1> finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." I am trying to bypass server certificate of my website because it's self-signed. The following code works in a test app, but not in another app. They have exactly have the same entitlements: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.files.user-selected.read-write</key> <true/> <key>com.apple.security.network.client</key> <true/> </dict> </plist> func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { let protectionSpace = challenge.protectionSpace guard protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, protectionSpace.host.contains("mywebsite.net") else { completionHandler(.performDefaultHandling, nil) return } guard let serverTrust = protectionSpace.serverTrust else { completionHandler(.performDefaultHandling, nil) return } let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } @IBAction func testMenuItem_select(_ sender: Any) { print("\(sender)") Preferences.instance.openTipShowed = false testURLSession() func testURLSession() { let session = URLSession(configuration: URLSessionConfiguration.ephemeral, delegate: self, delegateQueue: nil) let url2 = "https://www.mywebsite.net/spiders.txt" let url3 = "https://www.apple.com/" let url = URL(string: url2)! var request = URLRequest(url: url) let task = session.dataTask(with: request) { data, response, error in if let error { print(error) } if let data { let text = String(data: data, encoding: .utf8) print("HTTP response object:", response ?? "") print("HTTP resonse text:", text ?? "<empty response>") } } task.resume() } }
1
0
717
Oct ’23
Need help on generics where clause
I have the following class: /// Act as a reference container for value types. public class ValueBox<ValueType: ??> { public var value: ValueType public init() { value = ValueType() // Compiler error } public init(_ value: ValueType) { self.value = value } } Is it possible to specify the generic type ValueType can be inited?
1
0
306
Oct ’23
FileMerge won't run on macOS 12.7
I am still on Xcode 14.3 and my macOS is version 12.7 (21G816). Today I am surprised to find out that FileMerge tool won't run when I invoke it from Xcode "Open Developer Tool" menu. Is there a standalone download for this tool? Or is there any better alternatives to it?
2
0
764
Oct ’23
PropertyListDecoder and .strings file
I have the following code: let file = "/path/to/en.lproj/Localizable.strings" let dec = PropertyListDecoder() var f: PropertyListSerialization.PropertyListFormat = .openStep do { //let data = strings.data(using: .utf8)! let data = try Data(contentsOf: URL(fileURLWithPath: file)) let list = try dec.decode([String: String].self, from: data, format: &f) print("foramt:", f.rawValue) list.forEach { print($0.key, $0.value) } } catch { print(error) } It seems PropertyListDecoder can correctly decode .strings file format; detected format is openStep (value is 1). But I am note sure because I couldn't find any docs on PropertyListDecoder about .strings file. Can anyone confirm this?
1
0
448
Oct ’23
Data(contentsOf:) with huge file
I have a function that computes MD5 hash of a file: func ComputeMD5(ofFile path: String) -&gt; [UInt8]? { if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) { var digest = [UInt8](repeating: 0, count: 16) data.withUnsafeBytes { _ = CC_MD5($0.baseAddress, UInt32(data.count), &amp;digest) } return digest } return nil } Now I wonder/worry what happens if the file is very huge. Does the runtime perform disk memory paging?
2
1
702
Nov ’23
Is it safe to call low level Darwin function on FileHandle?
I have the following code: extension FileHandle { func readInto(_ buffer: inout [UInt8]) -> Int { buffer.withUnsafeMutableBytes { Darwin.read(fileDescriptor, $0.baseAddress, $0.count) } } } It can compile, but I wonder if this is supported since it's code in an app that is going to be submitted to App Store. The reason I don't use read(upToCount:) or readData(ofLength:) is that I am reading possibly very large files by small chunks and don't want to let Swift runtime allocate small buffers repeatedly.
0
0
317
Nov ’23
Weird problem of NSTableView with auto layout
I have had this issue for a long time. If I configure any auto layout constraints in TableViewCell, I get extremely weird layout behavior in IB designer; however, layout is completely good during runtime. For example, with a completely new project and a single NSTableView on the main view, I get: If I resize main view, the tableview won't get resized Every time I reopen the project, the tableview would shrink by height. It seems the shrinked height is doubled every time. For example, in the following screenshot, the gap is 56. Next reopen will double the gap to 112. Is this a known bug? I would want to file bug report at https://feedbackassistant.apple.com.
1
1
658
Nov ’23
How make a var modifiable but not assignable?
Suppose I have the following class: class Some { var list = [String]() } // In other places, I want to append to the list someInstance.list.append("new string") // ...but I do not want to re-assign the list itself: someInstance.list = [String]() What is the exact syntax for declaring list?
Replies
2
Boosts
0
Views
436
Activity
Oct ’23
Need help on Array and API design
I am working on an app which I plan to submit to App Store in 2 weeks. Now I have a headache with Array type. I have the following API design in my app: class SomeParser { func getTranslations(_ locale: String) -> [TranslationUnit]? { // Check if the locale units are already in a cache, if not build a new list // and return the list } } class MainVC { func doTranslation() { var list = parser.getTranslation("en") // Modify some units in the list. // How to put it back to cache? } } Now the problem is that since Array is a value type, the modified list is isolated. The only way to reflect the changes into cache is put the modified list back to cache: translationCache[locale] = modifiedList But this is counter-intuitive and waste of performance. Is there anyway to workaround this problem?
Replies
1
Boosts
0
Views
417
Activity
Oct ’23
Weird error with HTTPS connection
I have a weird problem with HTTPS connection. Task <A19A5441-F5CD-4F8C-8C88-73FC679D8AE0>.<1> finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." I am trying to bypass server certificate of my website because it's self-signed. The following code works in a test app, but not in another app. They have exactly have the same entitlements: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.files.user-selected.read-write</key> <true/> <key>com.apple.security.network.client</key> <true/> </dict> </plist> func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { let protectionSpace = challenge.protectionSpace guard protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, protectionSpace.host.contains("mywebsite.net") else { completionHandler(.performDefaultHandling, nil) return } guard let serverTrust = protectionSpace.serverTrust else { completionHandler(.performDefaultHandling, nil) return } let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } @IBAction func testMenuItem_select(_ sender: Any) { print("\(sender)") Preferences.instance.openTipShowed = false testURLSession() func testURLSession() { let session = URLSession(configuration: URLSessionConfiguration.ephemeral, delegate: self, delegateQueue: nil) let url2 = "https://www.mywebsite.net/spiders.txt" let url3 = "https://www.apple.com/" let url = URL(string: url2)! var request = URLRequest(url: url) let task = session.dataTask(with: request) { data, response, error in if let error { print(error) } if let data { let text = String(data: data, encoding: .utf8) print("HTTP response object:", response ?? "") print("HTTP resonse text:", text ?? "<empty response>") } } task.resume() } }
Replies
1
Boosts
0
Views
717
Activity
Oct ’23
Need advices on NSMutableArray in Swift
I am having coding design difficulties with Array in Swift, see this post. So I decided to turn to the old NSMutableArray. I'd like to know if there are any known problems of this approach. Any pitfalls and known practices?
Replies
2
Boosts
0
Views
441
Activity
Oct ’23
Need help on generics where clause
I have the following class: /// Act as a reference container for value types. public class ValueBox<ValueType: ??> { public var value: ValueType public init() { value = ValueType() // Compiler error } public init(_ value: ValueType) { self.value = value } } Is it possible to specify the generic type ValueType can be inited?
Replies
1
Boosts
0
Views
306
Activity
Oct ’23
Is it possible to get current executing function's name?
In other languages, I am able to get current function's name using some kind of so-called reflection API. Does Swift provide similar API?
Replies
2
Boosts
0
Views
456
Activity
Oct ’23
FileMerge won't run on macOS 12.7
I am still on Xcode 14.3 and my macOS is version 12.7 (21G816). Today I am surprised to find out that FileMerge tool won't run when I invoke it from Xcode "Open Developer Tool" menu. Is there a standalone download for this tool? Or is there any better alternatives to it?
Replies
2
Boosts
0
Views
764
Activity
Oct ’23
PropertyListDecoder and .strings file
I have the following code: let file = "/path/to/en.lproj/Localizable.strings" let dec = PropertyListDecoder() var f: PropertyListSerialization.PropertyListFormat = .openStep do { //let data = strings.data(using: .utf8)! let data = try Data(contentsOf: URL(fileURLWithPath: file)) let list = try dec.decode([String: String].self, from: data, format: &f) print("foramt:", f.rawValue) list.forEach { print($0.key, $0.value) } } catch { print(error) } It seems PropertyListDecoder can correctly decode .strings file format; detected format is openStep (value is 1). But I am note sure because I couldn't find any docs on PropertyListDecoder about .strings file. Can anyone confirm this?
Replies
1
Boosts
0
Views
448
Activity
Oct ’23
How convert data encoded in GBK/GB2312 to string?
// The builtin encoding does not support GBK/GB2312 String(data: data, encoding: .GBK) How do I convert data which is encoded in GBK/GB2312 (or anything else) to a string instance?
Replies
1
Boosts
0
Views
552
Activity
Nov ’23
Data(contentsOf:) with huge file
I have a function that computes MD5 hash of a file: func ComputeMD5(ofFile path: String) -&gt; [UInt8]? { if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) { var digest = [UInt8](repeating: 0, count: 16) data.withUnsafeBytes { _ = CC_MD5($0.baseAddress, UInt32(data.count), &amp;digest) } return digest } return nil } Now I wonder/worry what happens if the file is very huge. Does the runtime perform disk memory paging?
Replies
2
Boosts
1
Views
702
Activity
Nov ’23
Is it safe to call low level Darwin function on FileHandle?
I have the following code: extension FileHandle { func readInto(_ buffer: inout [UInt8]) -> Int { buffer.withUnsafeMutableBytes { Darwin.read(fileDescriptor, $0.baseAddress, $0.count) } } } It can compile, but I wonder if this is supported since it's code in an app that is going to be submitted to App Store. The reason I don't use read(upToCount:) or readData(ofLength:) is that I am reading possibly very large files by small chunks and don't want to let Swift runtime allocate small buffers repeatedly.
Replies
0
Boosts
0
Views
317
Activity
Nov ’23
Weird problem of NSTableView with auto layout
I have had this issue for a long time. If I configure any auto layout constraints in TableViewCell, I get extremely weird layout behavior in IB designer; however, layout is completely good during runtime. For example, with a completely new project and a single NSTableView on the main view, I get: If I resize main view, the tableview won't get resized Every time I reopen the project, the tableview would shrink by height. It seems the shrinked height is doubled every time. For example, in the following screenshot, the gap is 56. Next reopen will double the gap to 112. Is this a known bug? I would want to file bug report at https://feedbackassistant.apple.com.
Replies
1
Boosts
1
Views
658
Activity
Nov ’23
Array withUnsafeMutableBytes(_:) vs withUnsafeMutableBufferPointer(_:)
I cannot get any clue on the differences between these 2 functions of Array type. Can anyone explain by examples?
Replies
1
Boosts
0
Views
347
Activity
Nov ’23
Is it possible to convert String.Index to its underlying index number?
I am aware Swift deliberately hides details (the actual index number) for safety, by introducing this verbose construct. But I just got curious - is it possible to convert Index back to its underlying number?
Replies
1
Boosts
0
Views
842
Activity
Nov ’23
How parse byte size strings into actual number?
I want to convert byte size strings like "1234kb", "100mb" or "5gb" to their actual number representation. Is there any builtin functions for this purpose?
Replies
2
Boosts
0
Views
461
Activity
Nov ’23