Key-value observing is a mechanism that allows objects to be notified of changes to specified properties of other objects. You can use key-value observing with a Swift class, as long as the class inherits from the NSObject class. You can use these two steps to implement key-value observing in Swift. Add the dynamic modifier and… Continue reading Key-Value Observing
Category: iOS
How to upload an App with universal framework to AppStore?
Cocoapods is a popular dependencies management tool for iOS development. We notice that in Cocoapods-v1.3, the framework MUST include simulator (x86_64, i386) architectures, otherwise the pod spec lint will fail and the pod cannot be uploaded to Cocoapods server. It shows error as follows: xcodebuild: fatal error: lipo: -remove's specified would result in an empty… Continue reading How to upload an App with universal framework to AppStore?
Cocoapod tips
check installed cocoapod plugin gem list --local | grep cocoapods create pod pod spec create POD_NAME https://eladnava.com/publish-a-universal-binary-ios-framework-in-swift-using-cocoapods/ Register an account by running the following, entering your full name and e-mail address: pod trunk register you@email.com 'Full Name' create pod demo pod lib create SwiftKit pod spec lint --verbose ...... pod trunk push SwiftKit.podspec https://s3.amazonaws.com/elasticbeanstalk-us-east-1-564874457370/SwiftKit.zip check… Continue reading Cocoapod tips
Hide implementation of swift framework when distributing
In this article, I will demonstrate how to create a Swift NiceLogger framework and push to Cocoapods without sharing source code. You can download the final project from NiceLogger 1. Create a Swift framework 1.1 Create a new framework project  Product Name NiceLogger, Set language to Swift  1.2 Create a new file NiceLogger.swift… Continue reading Hide implementation of swift framework when distributing
CoreLocation in iOS
CoreLocation in iOS11  
iOS Grand Central Dispatch
GCD provides three main types of queues:  1.1 Main queue Main queue runs on the main thread and is a serial queue. This is a common choice to update the UI after completing work in a task on a concurrent queue. To do this, you’ll code one closure inside another. Targeting the main queue… Continue reading iOS Grand Central Dispatch
RxSwift Scheduler
Where we call subscribeOn() in a chain doesn't really matter when to call it. Where we call observeOn() does matter. subscribeOn() tells the whole chain which thread to start processing on. We should only call it once per chain. If we call it again lower down the stream it will have no effect. observeOn() causes… Continue reading RxSwift Scheduler
How to generate **.cer** and **.p12** file for iOS push notification
Every time I created a new app with push notifications, iOS, I'm sure I've got everything right and then something refused to work. So this time I'm writing it down so I can't possibly get it wrong again.  Generally, we need 2 files for push notification: * .cer file * .p12 file Generate cer… Continue reading How to generate **.cer** and **.p12** file for iOS push notification