1. Clean iOS app launch screen cache
You might have noticed when you tried to change something in the launch screen on the iOS application, you still see the old launch screen. Because the system caches launch images and it's not cleared even after deleting the application.
For cleaning the launch screen, all you have to do to completely clear your app’s launch screen cache is run this code inside your app:
import UIKit
public extension UIApplication {
func clearLaunchScreenCache() {
#if DEBUG
do {
let launchScreenPath = "\(NSHomeDirectory())/Library/SplashBoard"
try FileManager.default.removeItem(atPath: launchScreenPath)
} catch {
print("Failed to delete launch screen cache - \(error)")
}
#endif
}
}
To use this, add the following lines in the app's didFinishLaunchingWithOptions
delegate method:
UIApplication.shared.clearLaunchScreenCache()
Checkout sample project on Github.
2. Add Function Documentation
You can use ⌥
+ ⌘
+ /
(option + command + ) to add function documentation.
3. Project Build Settings Documentation
Do you know Xcode's project build setting has documentation? Just press ⌥
(option) + Double Click for complete documentation or open Quick Help Inspector.
4. xed - Xcode Text Editor Invocation Tool
If you are in your Xcode project folder and your project has both a workspace(.xcworkspace
) and a project(.xcodeproj
) the file then you can use following command to open workspace in Xcode from your terminal -
xed .
If your project only has a project(.xcodeproj
) the file then the same command will open your project.
You can also open/edit a single file from your Xcode project without launching the complete Xcode workspace or project. Like if you want to open your Podfile
then we can open using -
xed Podfile
xed was introduced in Mac OS X 10.5 with Xcode 3.0.
5. Using #function for UserDefaults key
You can use #function
literal to get the property name as UserDefault key. In the following example, #function
will get replaced by accessToken
. Be aware, changing the property names may break functionality for the existing users.
extension UserDefaults {
var accessToken: String? {
get {
return string(forKey: #function)
}
set {
set(newValue, forKey: #function)
synchronize()
}
}
}
6. Strongly Typed Info.plist
You can easily access info.plist
strongly typed by create a struct this way -
struct InfoPlist<T> {
static func get(for key: String) -> T? {
return Bundle.main.infoDictionary?[key] as? T
}
static subscript(key: String) -> T? {
return get(for: key)
}
}
Now you can use above InfoPlist<T>
struct like this -
let bundleIdentifier = InfoPlist<String>["CFBundleDisplayName"]
7. Generate Strongly-Typed Swift or Objective-C Data Models directly from JSON
Quicktype generate Strongly-Typed Swift/Objective-C Data Models from JSON, Schema, and GraphQL. You just need to paste your JSON string in left side text box. Generated models code has comments at the top with a code sample that shows how to convert a JSON string to instances of the generated types. You can also use any other way.
8. Create Empty Commits
Sometimes we need to make empty commits on some testing branch so that we can trigger various kinds of things like Jenkins build etc. So, here the way to make an empty commit which will trigger a push event on GitHub/GitLab, etc. This is more convenient than adding spaces to your README.md file.
git commit --allow-empty -m "Trigger Jenkins Build"
9. UIRefreshControl for any UIScrollView
Apple documentation shows us how we can use an UIRefreshControl
in an UITableViewController
, but do you know, we can add it to any UIScrollView
?
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
scrollView.addSubview(refreshControl)
In a similar way, we can add UIRefreshControl
to a WKWebView
.
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
webView.scrollView.addSubview(refreshControl)
10. Explore Private Framework with iPad Swift Playground App
Swift Playground app is the best way to explore iOS private APIs. You can browse iOS Private Headers for latest version from here..
This was the part 3 of Best iOS Development Tips and Tricks series. Here the part 1 and 2 of the same series.