• #54 Stubbing DispatchQueue in unit tests to run tests synchronously

    In issue #50 Synchronous Unit Tests I described an approach on how to get rid of waiting for XCTestExpectation to be fulfilled. The approach assumes hiding an asynchronous dispatch of a block/closure of code to a GCD queue behind an abstraction layer called the Dispatching protocol.

  • #53 First steps with NFC on iOS 13

    In this post I would like to point the most important things which were mentioned during Core NFC Enhancements talk on WWDC 2019. Right now I’m starting the new project where NFC knowledge will be very useful for me. Writing this post gave me a kick to learn more about the news regarding NFC from the last Apple conference.

  • #52 Speaking the same language

    我不说你说的语言
    A few months ago I finished my 17 months long stay in Singapore. It was an amazing time during which I met brilliant people, sweated a lot in tropical weather and worked on a messaging application for iOS.

  • #51 Singo

    I’m very happy to share with you my new application: Singo, for checking singing abilities.

  • An ask

    Our dear friend and a founder of swifting.io - Michał, had an accident two months ago. He had a bad luck and got hit by a car while waiting on a crossing for a green light. He was supposed to get married in the summer, however life had different plans for him.

  • #50 Synchronous Unit Tests

    Mobile applications are usually multi-threaded. We perform UI operations on the main thread and dispatch heavy tasks (e.g. network requests, JSON parsing, writing to a file on a disk) on background threads. The iOS allows us to use backgrounds threads for example by using Grand Central Dispatch API (GCD), i.e. by performing operations on DispatchQueue objects. Work dispatched to a background DispatchQueue is usually done asynchronously with queue.async{} call.

  • #49 Builder pattern

    In issue #41 in which we have built an app that uses a photo camera to capture one’s loayalty cards we used a pattern that we named Builder to configure properties of objects. How does the code look like when we use Builder pattern?

  • #48 Locating the Yeti with iOS

    iOS Conf SG

    On October 20th 2017 Dominik and I were on a seek for the Yeti in Singapore! We tried to tap into Singlish and we presented on iOS Conference in Singapore a topic about Location on iOS and our technique to find a snowboarder on a mountain slope mentioned in article #46.

  • #47 SiriKit news in 2017

    The 2017 season for Apple news is almost over. WWDC 2017 is a far history already. We’ve got new frameworks, revamped Xcode 9, iPhone X and … HomePod coming soon.

  • #46 Locating a snowboarder 🏂 on a slope

    #46 Locating a snowboarder 🏂 on a slope

  • #45 Can you sing well?

    Remark

  • #44 Watch your Bluetooth!

    On WWDC 2017 the breaking news was revealed - WatchOS 4 ships with CoreBluetooth and allows apps to connect up to 2 peripherals! ❤️! This issue will show a simple implementation of a Bluetooth Central that can be used in apps built for iOS 11 and WatchOS 4!

  • #43 Bye Bye fileprivate

    Just one week left till WWDC 2017! I am expecting much more power given to developers in SiriKit and a couple of surprises. I guess you are waiting for some new APIs too 😬.

  • #42 Review all the things!

    Today we’d like to share a talk presented on May 14th at the UIKonf conference in Berlin.

  • #41 Architecture Wars – MVC strikes back & takes a photo with AVFoundation

    Not so long ago, in a galaxy not so far away… we promised you a series about architectural patterns. This post is a follow up for our initial issue on the topic. And finally, we can share with you the My Cards application written in MVC …

  • #40 How to swiftly dequeue a cell?

    The UITableView and UICollectionView classes serve table-like and matrix-like layout for content to be displayed on screen. Both components display their data in corresponding UITableViewCell and UICollectionViewCell subclasses. Both components contain mechanisms for reusing a cell, that was initialised earlier and is not visible on the screen, e.g. when user scrolled the content. You can find a nice description and visualisations on that subject here.

  • #39 HomeKit Devices Simulator using Node-RED & Raspberry Pi

    In Issue #38 Bartek showed how we can leverage Homebridge to emulate HomeKit API for various smart devices.

  • #38 Home automation with Homebridge

    One beautiful day I thought:

  • #37 iOS Application Security Basics

    Have you ever exposed your company to intellectual or financial loss? Have you ever written an app without having security and privacy in mind? If you want to know more about simple tricks to make your apps a bit safer, just watch our video from a meetup. You will get to know iOS security basics and best practices to build secure apps! PS. The topic was presented on iOS Dev Scout Singapore, Mobile Warsaw #45 and CocoaHeads Tricity.

  • #36 ObjectiveC2Swift Review

    ObjectiveC2String

  • #35 Structs Alternative - Using Swift Protocols to Enhance Safety of Core Data Access

    A previous article mentions the usage of a structs layer in accessing Core Data.

  • #34 🎂 Happy Birthday (for the 1st time)

    Today is 26th of January. Our blog was initiated on that day, exactly one year ago, with this post. At that time, we couldn’t even imagine and wish things would have gone so well! You’ve visited our website 143 377 times from all over the world 🌍🌏🌎!

  • #33 Security – implement your own encryption schema

    After publishing this post and shared it via Twitter, on the next day we got a message from Rob Napier:

  • #32 Errorify String

    Swift.Error

    Swift introduces pattern of throwing errors, to propagate error conditions in a program. Errors are represented by types that conform to empty Error protocol, usually enum types.

  • #31 Getting started with Alexa on iOS

    Happy New Year 2017! 🍾🎉

  • #30 Cyclomaticly Complex Settings View Controller

    Simple screens evolve

  • #29 An alternative to if let and guard let

    It’s brilliant when you can work with people smarter (or even a lot smarter) than you! You can learn so much from them. And then write about the things you’ve learned 🙃.

  • #28 Better CoreData with Swift Generics

    In Issue #25 I have been talking about building a modern CoreData service using NSPersistentStoreContainer. This resulted in a lot of boilerplate code removed and a simpler API. Now, if you are using architectures like VIPER, VIP (see more in Issue #24) or simply ensuring immutability of your models, you are probably wrapping your CoreData’s NSManagedObject subclasses into structs of some sort and use them in upper layers of your app.

  • #27 Localize your strings swiftly

    Hey, long time no see! It’s because we’re working on two important issues, stay tuned! This issue will be short and it will show you how you can define and access localized version of your strings in a swift manner!

  • #26 SwiftLint, SonarQube and CheckMarx… what else?

    Today we would like to talk about news from SwiftLint and also look at different static analyzers frameworks like:

  • #25 Core Data in iOS10 - NSPersistentContainer

    Xcode 8 is here if you have not peeked at any of betas yet, you will find all kinds of new stuff. There is Swift 3 with major changes, there are new frameworks like SiriKit and there are enhancements to existing ones like notifications. We have also received simplified Core Data stack in form of NSPersistentContainer that does heavy part of setup for us. Is it worth trying? Let’s dig in and find out.

  • #24 Architecture Wars – A New Hope

    A long time ago in a galaxy far, far away… Or maybe not that far away…

  • #23 Notifications in iOS 10

    iOS 10 gave us new rich notifications with a lot more functionalities comparing to old ones. We can view photos and videos or respond to a message right from our notifications. In this post I would like to focus on them, show you some code snippets, examples and good practices. I hope it will be helpful for development in your current and future applications.

  • #22 Swift 3 Access Control (Xcode 8 Beta 6)

    On August 15th 2016, Xcode 8 Beta 6 was released and brought some significant changes to Swift Access Control and other parts of language.

  • #21 iOS Security 101

    Recently, I have been watching first season of Mr. Robot and I started paying even more attention to security and privacy. I’ve always used multiple passwords, privacy filter on my Mac when traveling and a strong passcode on my iPhone. But from time to time everyone does some silly mistakes. In Mr. Robot for example, a guy from AllSafe (i.e. company that deals with cyber security) inserts to his computer a CD disk from an unknown source which installs spyware. I was wondering how one can be that stupid? But only after you do something wrong do you realize that you made a huge mistake. I feel very secure with my passcode and Touch ID. A few days ago I caught myself going around with iOS beta 10 on my personal phone. I hope that beta is at least as secure as iOS 9 and doesn’t have any crucial vulnerabilities. But how secure iOS is, by the way?

  • #20 SiriKit – Can you outsmart provided Intents?

    In my first year of blogging in iOS space it became obvious to me that a period of time after WWDC is a great time for bloggers. There are plenty of things to explore and write about. Today, I would like to write about my first steps and attempts to outsmart limited SiriKit capability given to us, developers in iOS 10. Was I successful? Hop in and check out yourself. Seven getting started tips will get you on board faster.

  • #19 Exploring music basics with AudioKit

    Have you ever had a chance to use some audio frameworks in your mobile application project in purpose of signal processing, audio streaming or spectrum analyzing? I have to say that I haven’t… but I’m quite interested in music. This is the reason why I wanted to explore audio functionality on iOS devices and make first step with digital audio. During exploring the internet I found some interesting library: AudioKit, it seemed to me quite powerful and advanced, that’s why I wanted to take a look on it.

  • #18 Do pure Swift objects have load() method?

    I’m pretty sure this day, or actually the whole week, will be pretty exciting due to the start of WWDC 2016. Before that happens I’d like to share my finding from unit testing of one of my view controllers. If you’re not familiar with unit testing, check out our last issue Unit Test all the things!.

  • #17 Unit test all the things!

    There is always a half

  • #16 Parse Server – 100 days later

    Around 100 days ago, Parse.com announced its shut down on 28th of January 2017. At the same time an open sourced Parse Server was born. Team advised to migrate databases until the end of April 2016 and to move services to self hosted instances by the end of June 2016. By following this guidance developers are to avoid procrastination and have plenty of time for transition and pointing their apps to new endpoints.

  • #15 Nested enums or rather never ending posts about enums:)

    Today I would like to discuss how to present UITableViewCell contents by using enums. A simple switch statement can help us with displaying data on our tableView. What scenario would I like to focus on?

  • #14 Code Review – Tips & Swifts

    Last week, in issue #13, we introduced a definition of Code Review. Today we’ll get deeper into the topic, present some tips & swifts & tricks when performing a review and focus on some mistakes found when reviewing a 🐦Swift code.

  • #13 Code Review – are we too busy to improve?

    Issue #10 has had a very good perception by the community. For this reason we will blog about code quality topics from time to time. Today we’d like to discuss code review process, challenges one may encounter when introducing it in their workplace and what to consider when reviewing one’s source code.

  • #12 Custom UIViewController transitions in VIPER

    View Controller Transitioning API is available since iOS 7. It has made creating custom transitions between UIViewControllers much easier and our apps got a new life. You can use the API in both Storyboard and non-Storyboard projects.

  • #11 SwiftLint

    Should the opening brace of a function or control flow statement be on a new line or not ?:) This and many other questions cross my mind when I think about coding style. I love the comment from Ray Wenderlich’s Swift style guide:

  • #10 Is Christmas earlier this year? – code quality analyser & ABC

    Code quality - what to use? 🔧🔨

    There are a few ways we can ensure better code quality of our projects. Starting from unit testing then going through lint-like programs, code formatters, static code analysers, code reviews and ending with all that stuff I forgot to mention … ;) The most demanding and also worth applying, in my opinion, are unit tests and code reviews, but we can get pretty much hints on code that should be improved from static code analysers.

  • #9 How to invalidate NSTimer properly?

    NSTimer is a useful little one. It waits for some time and then fires, can fire periodically and runs in the run loop. There is also one unexpected feature. NSTimer retains its target. It’s not a big deal when you use a non-repeating timers as they get invalidated automatically after firing. However, when you use a repeating timer and forget about retaining, this means trouble.

  • #8 VIPER to be or not to be?

    This time we would like to tell our story and share the experience about VIPER. Especially about good practices, how we deal with some specific cases and about our recommendations. We count on the comments with your experience!:)

  • #7 Do I love or crash something? – shortly on capture lists

    I love pizza… or pasta… or it just crashes…

    Some time ago I have attended an iOS meetup in Poznań, on which the attendants were given a short quiz during a break. We had to answer what would be printed in the console after code execution. One of the code snippets looked similarly to this one:

  • #6 Basic LLDB tips

    Long story short

    For a few years of programming iOS apps, my use of LLDB debugger has been minimal:

  • #5 When compiler doesn’t know when a String is of String type

    String initialised with a class

    Did you know that Swift 2.1 introduced new syntax for initialisation that works more or less like NSStringFromClass([Object class]) in Objective-C? From now on, you can initialise String in the following way:

  • #4 Migration from Parse to Heroku

    In this tutorial I will show how to migrate our iOS Parse application to Heroku step by step:

  • #3 Infix operator

    Have you ever had a chance to see code similar to the one below?

  • #2 Un-crash swiftly from CBCentralManager callbacks to a deallocated object

    CBCentralManager

    CBCentralManager is a class from CoreBluetooth framework for Bluetooth connectivity. It servers as a configurator of communication with external devices, represented as CBPeripheral objects by the framework. Configuration of Bluetooth interface and communication with peripherals is done asynchronuousley, so one can set self as delegate in order to catch Bluetooth-related events.

  • #1 Meaningful print debugging

    Print debugging is simple and yet a powerful method. It is usually enough to toss a print() in a couple of places and a problem is recognised. As it works well for values and simple objects, when we print a more complex instance, the result is less informing.

  • #0 Big Hi to the world!

    Big Hi to the world !