Post

Replies

Boosts

Views

Activity

Reply to How to force XCode 14.3 to install on Monterey
I found a not-so-perfect solution. It turned out that you can actually ignore Info.plist hacking. You can directly run it inside a Terminal window. I just downloaded Xcode_14.3.1_Release_Candidate.xip yesterday and I can get it running using the following commands: cd ~/Application/Xcode.app/Contents/MacOS ./Xcode It works without any problem. Building/debugging works fine. But there is some gotchas: The icon of course is shown as "No" sign. When there is no project open, and you switch to other apps, you have no way to switch it back because macOS won't list it when you press CMD+TAB, but it is in Activity Monitor. So comes a question. Does anyone know how bring Xcode app window back?
May ’23
Reply to Weird error with HTTPS connection
I found the answer myself. It's a misunderstanding of ATS (Apple Transport Security) feature. I thought only non-HTTPS protocol needs the following ATS in info.plist: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> But it turned out that connecting to HTTPS also needs the above setting.
Topic: Programming Languages SubTopic: Swift Tags:
Oct ’23
Reply to Need advices on NSMutableArray in Swift
It's an agony working with array/dictionary in Swift! NSMutableArray does not support generics so I have to stick to Swift builtin array. I finally have to employ a not-so-perfect-and-ugly workaround: /// Act as a reference container for value types. open class ValueBox<ValueType> { public var value: ValueType public init(_ value: ValueType) { self.value = value } } // Arrays in a dictionary typealias TranslationUnitBox = ValueBox<[TranslationUnit]> var translations = [String: TranslationUnitBox>() // Later in some other code if let box = translations["en"] { box.value[index].translatedText = "..." }
Topic: Programming Languages SubTopic: Swift Tags:
Oct ’23
Reply to How parse byte size strings into actual number?
It seems I can use the builtin Scanner class: public extension String { func parseByteSize() -> UInt64? { var n: UInt64 = 0 let scanner = Scanner(string: self) if scanner.scanUnsignedLongLong(&n) { if !scanner.isAtEnd { let suffix = self[self.index(self.startIndex, offsetBy: scanner.scanLocation)...] switch suffix.uppercased() { case "KB": n *= 1024 case "MB": n *= 1024 * 1024 case "GB": n *= 1024 * 1024 * 1024 case "TB": n *= 1024 * 1024 * 1024 * 1024 default: return nil } } return n } return nil } }
Topic: Programming Languages SubTopic: Swift Tags:
Nov ’23
Reply to Does Swift support number suffixes?
Actually I don't have 'a lot' examples. I just started real app development using Swift a couple of months ago. For this specific scenario, I really like to have what I have in C/C++. Advantages: It can save a few key strokes and makes me as a developer feel better; and even more, makes Swift feels more swift. auto n = 12345ull; vs var n: UInt64 = 12345 Real world example (unit test): func testByteSize() { let tests = [ (s: "1234", v: 1234), (s: "1kb", v: 1024), (s: "1234k", v: 1234 * 1024), (s: "3mb", v: 3 * 1024 * 1024), (s: "2GB", v: 2 * 1024 * 1024 * 1024), (s: "7tb", v: 7 * 1024 * 1024 * 1024 * 1024), ] for test in tests { let n = test.s.parseByteSize() XCTAssertNotNil(n) XCTAssertEqual(UInt64(test.v), n!) } } If Swift allows me to code a number as 1234ull, I won't have to do the UInt64(test.v) cast. Moreover, I really like the tuple's v field be UInt64 instead of default Int.
Topic: Programming Languages SubTopic: Swift Tags:
Nov ’23
Reply to How to force XCode 14.3 to install on Monterey
I found a not-so-perfect solution. It turned out that you can actually ignore Info.plist hacking. You can directly run it inside a Terminal window. I just downloaded Xcode_14.3.1_Release_Candidate.xip yesterday and I can get it running using the following commands: cd ~/Application/Xcode.app/Contents/MacOS ./Xcode It works without any problem. Building/debugging works fine. But there is some gotchas: The icon of course is shown as "No" sign. When there is no project open, and you switch to other apps, you have no way to switch it back because macOS won't list it when you press CMD+TAB, but it is in Activity Monitor. So comes a question. Does anyone know how bring Xcode app window back?
Replies
Boosts
Views
Activity
May ’23
Reply to Not able to inherit from NSObject in unit test
Can I delete this question? It's stupid because I was overwhelmed by other learning problems and asked this silly question.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Aug ’23
Reply to Linker errors in Swift app with a framework bundle
Ah, it's my fault. Framework in a bundle just won't work. I have to create a new target with a Framework type. Now my test app runs.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Aug ’23
Reply to How throw error in willSet
I found a solution myself. I need to force unwrap the newValue like below: willSet { // this guarantees newValue is not nil let _ = newValue! }
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Aug ’23
Reply to Is there any builtin Text Find Bar?
Okay, I just found answer myself - NSSearchField
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Sep ’23
Reply to Weird error with HTTPS connection
I found the answer myself. It's a misunderstanding of ATS (Apple Transport Security) feature. I thought only non-HTTPS protocol needs the following ATS in info.plist: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> But it turned out that connecting to HTTPS also needs the above setting.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Oct ’23
Reply to Need advices on NSMutableArray in Swift
It's an agony working with array/dictionary in Swift! NSMutableArray does not support generics so I have to stick to Swift builtin array. I finally have to employ a not-so-perfect-and-ugly workaround: /// Act as a reference container for value types. open class ValueBox<ValueType> { public var value: ValueType public init(_ value: ValueType) { self.value = value } } // Arrays in a dictionary typealias TranslationUnitBox = ValueBox<[TranslationUnit]> var translations = [String: TranslationUnitBox>() // Later in some other code if let box = translations["en"] { box.value[index].translatedText = "..." }
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Oct ’23
Reply to Need help on generics where clause
Is there any way to specify ValueType is a value type in the where clause? Apparently you don't need a box if the value is already a reference type.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Oct ’23
Reply to FileMerge won't run on macOS 12.7
It's strange that I can run FileMerge via command line opendiff file1 file2.
Replies
Boosts
Views
Activity
Oct ’23
Reply to PropertyListDecoder and .strings file
Does anyone know where I can find the specification of strings file format? Currently by pure observing, I believe the value part of key-value pair is very similar or same with C/JavaScript string syntax. Say, \n and " are escaped, but not sure if there are other specials.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Oct ’23
Reply to How convert data encoded in GBK/GB2312 to string?
After some digging on the net, I myself found a solution: NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString* newStr = [[NSString alloc] initWithData:data encoding:gbkEncoding];
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Nov ’23
Reply to How parse byte size strings into actual number?
It seems I can use the builtin Scanner class: public extension String { func parseByteSize() -> UInt64? { var n: UInt64 = 0 let scanner = Scanner(string: self) if scanner.scanUnsignedLongLong(&n) { if !scanner.isAtEnd { let suffix = self[self.index(self.startIndex, offsetBy: scanner.scanLocation)...] switch suffix.uppercased() { case "KB": n *= 1024 case "MB": n *= 1024 * 1024 case "GB": n *= 1024 * 1024 * 1024 case "TB": n *= 1024 * 1024 * 1024 * 1024 default: return nil } } return n } return nil } }
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Nov ’23
Reply to Does Swift support number suffixes?
Actually I don't have 'a lot' examples. I just started real app development using Swift a couple of months ago. For this specific scenario, I really like to have what I have in C/C++. Advantages: It can save a few key strokes and makes me as a developer feel better; and even more, makes Swift feels more swift. auto n = 12345ull; vs var n: UInt64 = 12345 Real world example (unit test): func testByteSize() { let tests = [ (s: "1234", v: 1234), (s: "1kb", v: 1024), (s: "1234k", v: 1234 * 1024), (s: "3mb", v: 3 * 1024 * 1024), (s: "2GB", v: 2 * 1024 * 1024 * 1024), (s: "7tb", v: 7 * 1024 * 1024 * 1024 * 1024), ] for test in tests { let n = test.s.parseByteSize() XCTAssertNotNil(n) XCTAssertEqual(UInt64(test.v), n!) } } If Swift allows me to code a number as 1234ull, I won't have to do the UInt64(test.v) cast. Moreover, I really like the tuple's v field be UInt64 instead of default Int.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Nov ’23
Reply to What should I do with UTI (NSImage.imageTypes)?
Yes! That's just what I need. if let ut = UTType.types(tag: "jpeg", tagClass: .filenameExtension, conformingTo: nil).first { print(ut.tags[.filenameExtension]) }
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Dec ’23
Reply to Common audio/image file extensions on macOS
For other peoples reference, I have found the answer in this thread, thanks to Quinn's reply.
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Dec ’23