S Link
raywenderlich.com Video Tutorials
Join over 4,000 subscribers in keeping your Swift & iOS skills up-to-date via hands-on tutorials β in video form! Learn Swift, Auto Layout, Stack Views, Collection Views, Core Data, WatchKit, tvOS, and more β the largest collection of Swift & iOS video tutorials anywhere.
Buddybuild: Continuous integration & delivery made easy!
Buddybuild is the only mobile continuous integration and delivery platform that takes just minutes to set up. With every code change, buddybuild will kick off a new build, run any tests for your app and automatically deploy to your testers. Then, with a simple screenshot, users can send their feedback along with diagnostic details to help resolve issues. Stop cobbling together and maintaining disparate mobile development systems. Start focusing on what you do best: creating apps people love π
Swift Around the Web
Three tips for concise Swift using the Guard statement
Whoa! Love the advanced use of guard
with enums here!
Using types to keep yourself honest
This week, I wrote about Phantom Types in Swift - one way to take advantage of the Swift's powerful type system to write amazingly clean and robust code.
I love the idea of using the Swift compiler to my advantage, but I've found it hard to actually do this in practice, mostly because it's not something that I've done before and it's hard for my brain to go there vs following my normal pattern of if checks.
I'm so grateful to @mhollemans for providing another great example of this to keep in mind as I improve my Swift code!
Coding
How to Login User Automatically Into The App With SFSafariViewController on iOS 9
A great way to make your app's user experience 10000000% better for your customers! Do this!
Apple News
New Features in Swift 2.2
A really good (more official) summary of Swift 2.2 changes. Reminder that C-style for loops are deprecated. Instead of this:
for var i = 0; i < 10; i++ {
print(i)
}
use this:
for i in 0 ..< 10 {
print(i)
}
For more fancy scenarios:
// 10 9 8 7 6 5 4 3 2 1
for i in (1...10).reverse() {
print(i)
}
// 0 2 4 6 8
for i in 0.stride(to: 10, by: 2) {
print(i)
}
Make sure to check out this blog post for additional changes and new solutions!
Other Cool Stuff
Open-Source Happiness Packets
One of my previous co-workers was surprised when I added positive comments on a pull request for something cool that he did and I liked. Nobody he's worked with has ever done that before!
Unfortunately, most PRs and code review feedback focus on things that don't work (think of the language we use - Issues!), and we don't get or give much positive feedback, even when it is often well deserved.
This is why I absolutely LOVE the Open-Source Happiness Packets project!
"The feeling that you made a difference, that your work matters and has value, and that the people you work with are happy to work with you, is an awesome feeling. With Open-Source Happiness Packets, we're trying to spread that feeling."
Go ahead, send a happiness packet to someone. Make their day!
Videos
Creating a Swift Library, with Jeff Hui
Libraries are the future for sharing your code, but theyβre also fraught with peril. Platforms, package managers and tests are all crucial for your successful library! In this talk from try! Swift, learn about all the tools and processes around shipping and maintaining a library in Swift.
Exploring MVC-N in Swift, with Marcus Zarra
@mzarra walks through a design pattern that he has been using on iOS for applications that require and use a large amount of data frequently requested from the internet. The design takes the well known Model View Controller pattern and expands upon it to allow for asynchronous network calls that are isolated from the User Interface controllers.
Swift Evolution
SE-0048 [Under Review]: Generic Type Aliases
See the above Using types to keep yourself honest post for a great example of why this would be super π and useful!
SE00053 [Accepted]: Remove explicit use of `let` from Function Parameters
This was in review last week, but has now been officially accepted πππ
func foo(let x: Int) { ... }
will now be:
func foo(x: Int) { ... }
Big refactoring change for Swift 3.0!
Functional Voodoo
The Reactive Revolution of Swift
"So what is really hard in asynchronous programming? Synchronization..."
ο£ΏWATCH
How to build a Compelling Watch App
Must-watch talk from @kristinathai if you're at all interested about building an Apple Watch App! My favorite section was about accessibility - I haven't thought of it at all when starting to build on the Apple Watch.
And it's not just for people who are permanently disabled - since the Apple Watch is an on-the-go device, situational disability can come up quite a lot - e.g. walking fast while holding a hot coffee, so now you don't have an arm available!
Swift Code
- cleartext-mac - A text editor that only allows the top 1000 most common words in English
- WKZombie - WKZombie is a Swift library for iOS/OSX to navigate within websites and collect data without the need of User Interface or API, also known as Headless browser. In addition, it can be used to run automated tests or manipulate websites using Javascript.
- Socks - Pure-Swift Sockets: TCP, UDP; Client, Server; Linux, OS X.
- ZYThumbnailTableView - a TableView have thumbnail cell only, and you can use gesture let it expands other expansionView, all diy
- SKPhotoBrowser - Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift
- Cache - Nothing but Cache.
Learning
How I Prepare a Talk
Definitely agree with using speaking as a way to learn something scary or hard. I've definitely successfully done this before!
What works best for me is asking friends for help by asking them this question: "If you could outsource your technical learning, what would be something you'd want to learn?"
This is so successful for me that my last two talks topics came from friends (shout out to @jaronmoore for vtables and @nerdonica for type erasure!). Then at the very least, I know I have an audience of one who will be interested in listening to my talk.
Business
How I negotiated for an additional $15,000 at Yammer.
Although super uncomfortable, silence could be a super effective negotiation tactic...
Swift Thoughts
Last week, I had the pleasure of attending and speaking at the Swift Warsaw Meetup. It was amazing to see an example from @_siejkowski on how to build a Swift Slackbot using Zewo, which I never heard of before, but seems to have some great advantages!
One thing that I keep hearing about server-side Swift is "oh, another framework!". This is a reminder that having A LOT of server-side Swift frameworks this early is NOT a bad thing. In fact, it's a good thing!
Swift, and especially server-side Swift, is super new, so it's good for us as a community to experiment with different implementations of how it should work. Some (ok, most likely only 2 or 3) will win, most will lose, but they will all eventually share ideas between each other and hopefully contribute to the best possible solution.
So go ahead, build another server-side Swift framework!