티스토리 뷰
코르도바 iOS 플러그인 만들기
Swift Version 5.3
Xcode Version 12.2
회사에서 iOS Framework를 만들어서 코르도바 프로젝트에 적용할 일이 있었는데,
이런 일까지 하게 될 줄은 몰랐을 뿐더러 또 시키면 뚝딱뚝딱 해낼 자신이 없어서 정리하기로 했습니다.
해당 글에는1. 코르도바 플러그인 만드는 방법
2. 플러그인 기본 언어 Swift로 변경하는 방법
3. 플러그인에 Framework 추가하는 방법
이 포함되어 있습니다.
0. Node.js 설치
node 설치 후 아래 내용들을 진행해 주세요.
1. 코르도바 플러그인 만들기
0) Cordova 설치
1
|
$ sudo npm install -g cordova
|
cs |
1) Plugman 설치
1
|
$ npm install -g plugman
|
cs |
위 명령어를 통해 plugman을 설치합니다.
플러그맨을 통해 간단하게 코르도바 플러그인을 만들 수 있습니다.
2) Plugin 만들기
1
2
3
|
$ plugman create --name SamplePlugin --plugin_id com.example.samplePlugin --plugin_version 0.0.1
$ cd SamplePlugin
$ plugman platform add --platform_name ios
|
cs |
플러그맨을 이용하여 코르도바 플러그인을 만들고, iOS를 추가합니다.
src 폴더 밑에 ios가 새로 생긴 것을 확인할 수 있습니다.
2. Swift로 플러그인 개발하기
1) Swift로 언어 변경하기
./src/ios/에 있는 SamplePlugin.m 파일을 지우고 SamplePlugin.swift 파일을 새로 생성합니다.
./에 있는 plugin.xml 파일에 있는 source-file 태그의 값을 SamplePlugin.swift로 변경합니다.
2) .swift 파일 작성하기
1
2
3
4
5
6
7
8
9
|
@objc class SamplePlugin : CDVPlugin {
@objc(test:)
func test(command: CDVInvokedUrlCommand) {
// 플러그인 내용 작성하기
let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK)
print("SamplePlugin - test")
self.commandDelegate!.send(pluginResult, callbackId: command.callbackId)
}
}
|
cs |
새로 만든 SamplePlugin.swift 파일을 위와 같이 작성합니다.
+) 플러그인에서 parameter를 보냈을 경우
1
2
|
let dataString = command.argument(at: 0) as! String
print(dataString)
|
cs |
+) response에 값을 보내고 싶을 경우
1
|
var pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAsString: 'Hello')
|
cs |
messageAsString 외에도 Int, Array, Bool 등 다양한 리턴 값을 줄 수 있습니다.
3) .js 파일 작성하기
1
2
3
|
exports.test = function(arg0, success, error) {
exec(success, error, 'SamplePlugin', 'test', [arg0]);
};
|
cs |
./www/SamplePlugin.js 파일에 위와 같은 함수를 작성합니다.
4) package.json 생성
1
|
$ plugman createpackagejson .
|
cs |
이렇게 package.json까지 생성이 완료되었다면 아래 4. 플러그인 설치하기
를 통해 플러그인을 설치 후 테스트 해보실 수 있습니다.
만약 framework를 추가하고 싶다면 3. Framework 추가하기
를 따라서 진행해주세요.
3. Framework 추가하기
사실 Framework를 추가하는 방법은 굉장히 간단합니다.
./src/ios/에 framework 파일을 추가한 후,
./에 있는 plugin.xml에
1
|
<framework src="src/ios/CordovaTestFramework.framework" custom="true"/>
|
cs |
를 추가하면 src/ios/SamplePlugin.swift에서 해당 프레임워크를 불러올 수 있습니다.
4. 플러그인 설치하기
해당 플러그인을 설치할 코르도바 프로젝트 안에서 아래 명령어를 입력하여 코르도바 플러그인을 추가합니다.
1
|
$ cordova plugin add --link ./{프로젝트 위치}/SamplePlugin --verbose
|
cs |
아래 코드를 입력해 test 함수를 실행시켜볼 수 있습니다.
1
|
cordova.plugins.SamplePlugin.test(data, success, error)
|
cs |
+ 깃헙에서 다운로드 받기
예제에 사용한 플러그인을 깃헙에 올려두었습니다.
플러그인 예제를 테스트 하실 분들은 깃헙에서 코드를 받으신 후, 4. 플러그인 설치하기
를 진행해 주세요.
해당 플러그인에서 테스트할 수 있는 함수는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
cordova.plugins.SamplePlugin.test(success, error)
// 정상적으로 진행되는 함수로, Xcode 창에서 "SamplePlugin - test" 로그를 볼 수 있습니다.
cordova.plugins.SamplePlugin.frameworkTest(success, error)
// import한 프레임워크 내부의 함수가 불러집니다.
// Xcode 창에서 "This Log is from Framework!", "SamplePlugin - frameworkTest" 두 가지의 로그를 볼 수 있습니다.
cordova.plugins.SamplePlugin.parameterTest('Parameter', success, error)
// 'Parameter'로 보내진 값을 읽어들이는 함수입니다.
// Xcode 창에서 "Parameter", "SamplePlugin - parameterTest" 두 가지의 로그를 볼 수 있습니다.
// Parameter 대신 다른 값을 넣을 경우 해당 값이 첫 번째 로그로 보입니다.
cordova.plugins.SamplePlugin.successTest(success, error)
// success 함수에 메세지를 담아 보내는 함수입니다.
// Xcode 창에서 "SamplePlugin - successTest" 로그를 볼 수 있습니다.
// success function의 argument로 "Successfully Run" 값이 전달되며, 아래 함수로 확인할 수 있습니다.
// ex) cordova.plugins.SamplePlugin.successTest(function(success) { console.log (success) }, function(fail) { console.log(fail) })
cordova.plugins.SamplePlugin.errorTest(success, error)
// fail 함수에 메세지를 담아 보내는 함수입니다.
// Xcode 창에서 "SamplePlugin - failTest" 로그를 볼 수 있습니다.
// error function의 argument로 "Error Occurred" 값이 전달되며, 아래 함수로 확인할 수 있습니다.
// ex) cordova.plugins.SamplePlugin.successTest(function(success) { console.log (success) }, function(fail) { console.log(fail) })
|
cs |
참고
https://cyberx.tistory.com/197
https://www.dynamsoft.com/codepool/cordova-plugin-custom-ios-framework.html
https://medium.com/@JordanBenge/how-to-write-an-ionic-cordova-plugin-in-swift-8d443430b27d
'Swift' 카테고리의 다른 글
Delegate Pattern 활용하기 (ViewController끼리 Data 전달하기 - 2) (3) | 2021.02.07 |
---|---|
RxSwift로 UITextField 글자 수 제한하기 (0) | 2021.01.24 |
ViewController끼리 Data 전달하기 - 1 (0) | 2020.11.25 |
loadView()에 대한 간단한 고찰 (5) | 2020.11.20 |
[Swift] Xib, Storyboard의 ViewController를 불러오는 방법 (2) | 2020.11.12 |
- Total
- Today
- Yesterday
- xcode group folder
- loadView viewDidLoad
- RxSwift UITetxtField
- urlsession 공통화
- swift delegate
- passing data between ViewControllers
- ios framework device simulator
- Objective-C 프로젝트에서 Swift
- 코르도바 iOS Framework
- urlsession 모듈화
- 코르도바 Swift
- 코르도바 iOS
- passing data between ViewController and View
- iOS Dark Mode
- codable
- urlrequest 공통화
- urlrequest 모듈화
- swift json 파싱
- xcode 16
- Swift 프로젝트에서 Objective-C
- linux java 설치
- UITextField 글자수 제한하기
- loadView
- ios universal framework
- codable date
- swift generic
- User Interface Style
- Viewcontroller data
- UIUserInterfaceStyle
- 코르도바 플러그인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |