25 comments

[ 3.2 ms ] story [ 60.0 ms ] thread
This is for iOS developers, maybe change the title?
The title should be "Useful Swift Things". I assumed it would be about useful tips and tricks about using iOS on an iPhone.
I'd like to know what sort of "tips and tricks" you expected to be hosted inside of a Github repository.
People use GitHub to store all kinds of useful crowdsourced documents.
Holding down on the keyboard space bar allows you to move the cursor around.
>Mobile OSes have an intuitive and discoverable UI. That's why they don't have man/info pages.
iOS has a Tips app which shows you stuff like this. Not quite a man page but the closest thing Apple is going to give users.
You can download manuals for most Apple products in the Apple Books store.
Good point, I actually forgot these existed. I guess they could be a bit more prominent.
I never even knew they existed until now. So much for so-called discoverability...
Don’t know how discoverable this would qualify it as, been a while since I setup an Apple product from new, but the Tips app does point people in the direction of it. Under the Essentials section of my phone, the HomePod section too if you’ve got one—I remember being pointed at it during setup—probably more if I went digging. Mac OS X’s Help pages ain’t too bad either when I last looked at them a year or so ago, and the Help menu is in every single application, not useful in all of them kind you, but at least the First party stuff it is.

There’s not been zero effort, but it isn’t completely in your face. That said when I reviewed the help pages, pointed a new Mac user at them and told her to go nuts, she refused to look and forgot that menu was there after a while. How do you solve that? People are either curious or they aren’t, but everything a new user needs is pretty much in there if they’re inclined to learn.

Wow, I didn't know this, thanks.
Before Apple decided that PC/handheld programming was only something that should be accessible to the elite most people kept scripts and small utility programs on github.
(comment deleted)
I applaud the effort and intent, but to be honest I think rookie iOS developers (who I believe are the intended audience) should stay away from most of this guide. Aside from typos and broken links, it also contains little hidden bites of bad practices and misinformation.

Some examples (just going down the readme):

> The observer pattern lets one object observe changes on another object. Apple added language-level support for this pattern in Swift 5.1 with the addition of Publisher in the Combine framework.

- Apple did not add language-level support, the Combine framework is a framework

- NSNotification center was added in iOS 2.0

    extension ViewController: ImagePickerDelegate {
        func didSelect(image: UIImage?) {
            self.yourImageView.image = image
            self.dismiss(animated: true, completion: nil)
        }
    }
> Good To GO

- No you're not: what about error handling, permissions, etc.

- There are dozens of libraries for this on Github that do the above and more, why not use them?

    func getDocumentDirectoryPath() -> URL {
        guard let url = useFileHandler.urls(for: .documentDirectory,
                                            in: .userDomainMask).first else { fatalError("Can't find path") }
        return url
    }
    
    func createFile(resourceName: String, fileExtension: String) {
        let fileURLProject = Bundle.main.path(forResource: resourceName, ofType: fileExtension)
        let folderUrl = getDocumentDirectoryPath()
        let fileUrl = folderUrl.appendingPathComponent("\(resourceName).\(fileExtension)")
        do {
            try useFileHandler.copyItem(atPath: fileURLProject ?? "", toPath: fileUrl.path)
        } catch {
            print(error)
        }
    }
- You shouldn't fatalError in code intended to be reusable and ready to blindly "copy and paste"

- print(error) doesn't exactly inspire confidence

- Again, plenty of libraries exist for this (and Foundation's FileManager isn't that verbose anyway)

    struct User: Codable {
        var first_name: String
        var last_name: String
        var country: String
    }
- You should use CodingKeys or JSONDecoder.KeyDecodingStrategy instead of snake_case

- This section would benefit from a concrete example of JSON<->Codable<->JSON

...and so on. I hope I don't come off too critical here, I just think the author would be better off building something more akin to an Awesome list of links to blog posts, as opposed to a single source of truth of surface-level information where where the bar of knowledge is much higher.

Can you recommend a good book or other resource as an alternative please?
Sure. Hacking with Swift [0] is great, CS193P [1] is very good (previous years were UIKit, now it's SwiftUI). Ray Wenderlich [2] and Swift by Sundell [3] are also good resources. The OG was NSHipster [4], but they haven't published much recently (some articles may be a bit outdated). For SwiftUI specifically, Swift with Majid [5] is a godsend and has amazing content. Finally, for learning good Swift language practices, the Swift book [6] is very friendly.

Edit: forgot https://www.objc.io, definitely one of the best

[0]: https://www.hackingwithswift.com

[1]: https://cs193p.sites.stanford.edu

[2]: https://www.raywenderlich.com

[3]: https://www.swiftbysundell.com

[4]: https://nshipster.com

[5]: https://swiftwithmajid.com

[6]: https://docs.swift.org/swift-book/

Excellent list of resources. Only addition I'd suggest making to that list would be https://swiftui-lab.com and the companion payware app. No affiliation, just someone who has found the information and large number of readily runnable code examples a huge time saver.
Just what I needed! Thanks for sharing.
Would add https://useyourloaf.com to your list. Great WWDC summaries, amazing auto-layout content, and just in general one of the better written Swift resources out there. I find things are written in more of a 'production ready' way instead of strictly for a tutorial. Check it out!
You shouldn't fatalError here at all, in any case. If you want to crash on failure, force unwrap the result, it's literally there for exactly this purpose.
Thanks for pointing out. I have to update it with better understanding
I never liked vendor-locked proprietary languages or tech stacks, I think it is even worse when it is from Apple.

I use C/C++ on iOS and I'll abandon the platform if they ever remove the support.