In my main business, I mainly do web application development, mainly on the back end side and infrastructure (a little). The front end side has touched js (Vue.js) and CSS (a little) for a while, but I had no experience in developing native apps.
Recently, when the system in charge of the shared authentication system of the company's service tried to introduce social login such as Facebook, according to Facebook's rules, it is necessary to use Facebook's dedicated SDK natively, so the native side Implementation is required. Also, I'm currently providing multiple services with a shared system, and there are native apps for each service, and if implemented separately, it would be inefficient and difficult to maintain, so a shared library ( I decided to make an SDK).
I had no experience developing iOS native apps, but I tried to challenge while learning. (Of course, we had the support and flow from those who have experience with native apps.)
This time I would like to write about that experience.
--Overview of Swift (basic knowledge)
Language is the most important factor in creating a library. So, let's study the basic knowledge of Swift language first!
To study Swift, I used the official Swift website. Specifically, study from Swift Tour and Language Guide.
--Developing iOS native apps
In order to create a library for iOS native apps, you also need to learn about iOS native app development.
You don't have to learn from scratch to develop an iOS app that can be published to the Apple Store, but you should learn the basics of developing an iOS app. Below are the official Apple tutorials and free udacity courses (both in English).
The outline is as follows.
--Create a new project
Open Xcode and create a new project. I want to create a CocoaPods library, so select Framework.
Enter the MySwiftLib
product name and check the" Include Tests "checkbox for unit tests
--Add a demo app to show how to use the library
Select the template File> New> Target
," App "from the Xcode menu
Enter the product name MySwiftLibExamples
and uncheck the" Include Tests "checkbox as the demo app does not require unit tests.
The structure of the project is as follows.
The podspec file is where the version, source location, meter information, etc. are defined.
A simple podspec looks like this:
First, create a pod spec in the project directory with the following command.
$ pod spec create MySwiftLib
MySwiftLib.podspec
Pod::Spec.new do |spec|
# ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.name = "MySwiftLib"
spec.version = "0.0.1"
spec.summary = "My First CocoaPods Library written in Swift"
spec.homepage = "https://github/username/MySwiftLib"
# ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.license = { :type => "MIT" }
# ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.author = { "trandoantan" => "[email protected]" }
# ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.platform = :ios
# ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.source = { :git => "https://github/username/MySwiftLib.git", :tag => "#{spec.version}" }
# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.source_files = ["MySwiftLib/**/*.swift", "MySwiftLib/MySwiftLib.h"]
# ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
# spec.dependency "FacebookCore"
# spec.dependency "FacebookLogin"
end
--Metadata
(** required ): Pod name, version, summary, home page
--License ( required ): For private pods, you only need to specify the license type.
--Author information ( required )
--platform
( optional ): Available platforms
--source
( required ): Specify the git repository and specify the tag for versioning (specify using the git tag when a new version is released)
--source_files
( required **): Source code files included in the library. In the above example header files and all Swift files
--dependency
: If you want to use an external package in the library, specify this
Add a new Swift file to MySwiftLib
.
MySwiftLib.swift
enum Language: String {
case japanese = "ja"
case english = "en"
var greetingTemplate: String {
switch self {
case .japanese:
return "Hello,%@!"
case .english:
return "Hello, %@!"
}
}
}
public class MySwiftLib {
var defaultLang: Language
public init(lang: String) {
if let language = Language.init(rawValue: lang) {
defaultLang = language
} else {
defaultLang = .english
}
}
public func greetingMessage(userName: String) -> String {
return String(format: defaultLang.greetingTemplate, userName)
}
}
It's a sample, so it's very easy.
Next, let's write a unit test for the above MySwiftLib
.
--Edit the MySwiftLibTest.swift
file in MySwiftLibTests
as follows.
MySwiftLibTest.swift
import XCTest
@testable import MySwiftLib
class MySwiftLibTests: XCTestCase {
func testGreetingMessageEnglish() {
let mySwiftLib = MySwiftLib(lang: "en")
XCTAssertEqual(mySwiftLib.greetingMessage(userName: "John"), "Hello, John!")
}
func testGreetingMessageJapanese() {
let mySwiftLib = MySwiftLib(lang: "ja")
XCTAssertEqual(mySwiftLib.greetingMessage(userName: "Alice"), "Hello, Alice!")
}
func testGreetingMessageDefaultEnglish() {
let mySwiftLib = MySwiftLib(lang: "hogehoge")
XCTAssertEqual(mySwiftLib.greetingMessage(userName: "John"), "Hello, John!")
}
}
--Run unit tests
Next, we will implement MySwiftLibExamples
for demonstration purposes.
--Add Label to Main.storyboard
and edit ViewController
as follows.
ViewController.swift
import UIKit
import MySwiftLib
class ViewController: UIViewController {
//MARK: Properties
@IBOutlet weak var greeting: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let mySwiftLib = MySwiftLib(lang: "ja")
self.greeting.text = mySwiftLib.greetingMessage(userName: "Tan")
}
}
--When I build MySwiftLibExamples
, it looks like the following. : tada :: tada :: tada:
--Create a MySwiftLib
repository on github
--Initialize git in the project directory and push the code to the repository you created
$ cd /your/project/path
$ git remote add origin [email protected]:username/repo-name.git
$ git add .
$ git commit -m "initial commit"
$ git push origin master
-Update podspec
with the repository you created (if needed)
MySwiftLib.podspec
spec.homepage = "https://github.com/username/repo-name"
spec.source = { :git => "https://github.com/username/repo-name.git", :tag => "#{spec.version}" }
--Tag and push the latest code
$ git tag 0.0.1
$ git push origin --tags master
This is a pod for personal use, so I will not publish the pod. If you want to publish the pod, please refer to here.
--To install the pod in your app, add the following code to the Podfile
# for https: pod 'MySwiftLib', :git => 'https://github.com/username/repo-name.git'
pod 'MySwiftLib', :git => '[email protected]:username/repo-name.git'
Since this pod will not be published, specify the pod with git
** If you use git
during development, it is inconvenient to reflect the update with the install/update command every time, so if you put the pod in the same directory of the installation destination application, the pod with the following settings will be used. Can be specified, and the update will be reflected immediately. ** **
# for https: pod 'MySwiftLib', :git => 'https://github.com/username/repo-name.git'
# pod 'MySwiftLib', :git => '[email protected]:username/repo-name.git'
pod 'MySwiftLib', :path => '../MySwiftLib'
--Execute the following command to install the pod in the app
$ pod install
#In case of update
$ pod update MySwiftLib
After installation, you can use it by import
ing the module, like MySwiftLibExamples
.
This time I introduced how to create a simple pod library using Cocoapod, but I am still new to iOS application development, so if you have any mistakes in this article, I would appreciate it if you could point out. ..
Thank you for reading!
Recommended Posts