Swifter {Swift Developer}

메뉴

iOS와 Android 앱을 같이 개발할 경우 기술 비교

[vc_row][vc_column][vc_column_text]보통 앱개발을 하게 되는 경우,  iOS와 Android앱을 모두 개발하게 되는 경우가 종종 발생하지만, 개발기간도 짧고 개발자도 구하기 어려운 경우가 많아, 개발방법과 설계등을 고려하여 개발비용을 낮추는 방법으로써 필자가 사용하는 방법을 소개하고자 합니다. 이번 내용에서는 iOS와 Android 앱 개발시 모두 사용할 수 있는 라이브러리를 소개하고  최대한 대중적으로 사용해본 경험이 있거나 들어봤을 것이라고 예상되는 것들로 구성했지만, 사람마다 생각하는 차이는 있기 때문에 다소 틀리더라도 양해부탁드립니다.

[/vc_column_text][vc_separator][vc_custom_heading text=”개발언어” use_theme_fonts=”yes”][vc_column_text]

보통 iOS 앱 개발을 한다고 하면 Objective-C언어를 생각하고, Android의 경우 Java를 사용하던 시대는 옛날입니다. 최근 iOS앱 개발이라고 한다면 Swift가 대세이고 Android도 Swift언어와 비슷한 문법으로 개발할 수 있는 Kotlin이라는 언어를 내놓았습니다.  Kotlin은 IntelliJ IDEA 개발도구로 유명한 JetBrains사가 개발하고 있는 100% Java호환 언어입니다. 2015년 12월 20일 현재 1.0.0 베타이기 때문에 대형 프로젝트에는 불안할 수 있지만 새로운 프로젝트를 진행한다면 개발언어로써 적용해보는 것이 좋다고 생각됩니다.

문법적으로 차이를 변수와 상수를 정의하는 차이를 보여주면 아래와 같습니다.

Swift언어의 경우

[code lang=”swift”]
var value1 = 99 // 변수
let value2 = 99 // 상수
[/code]

Kotlin언어의 경우

[code lang=”swift”]
var value1 = 99 // 변수
val value2 = 99 // 상수
[/code]

[/vc_column_text][vc_custom_heading text=”데이터베이스” use_theme_fonts=”yes”][vc_column_text]Realm

두 모바일 운영체제에서 사용할 데이터베이스라고 한다면 Realm이라고 생각합니다. 최근 빠르게 보급되고 있고 최근 한국어도 지원하고 있습니다.

이전까지는 iOS의 경우, CoreData를 주로 사용했고, Android의 경우 SQLite 또는 ActiveAndroid를 사용했을 것입니다.

[/vc_column_text][vc_custom_heading text=”리액티브” use_theme_fonts=”yes”][vc_column_text]

최근 유행하고 있는 리액티브 프로그래밍을 사용한다면 친화적인 기술로 Rx계열일 것입니다.[/vc_column_text][vc_custom_heading text=”리플래시 업데이트 ” use_theme_fonts=”yes”][vc_column_text]

리플래시 업데이트 UI는 두 모바일 운영체제 모두 표준으로 제공되며 UIRefreshControl는 iOS 6부터 지원하였고 SwipeRefreshControl는 Android Support Library, revision 19.1.0부터 추가되었습니다.

[/vc_column_text][vc_custom_heading text=”탭 전환” use_theme_fonts=”yes”][vc_column_text]

보통 뉴스관련 앱들에서 자주 사용하는 기능으로 탭을 스와이프하면 컨텐츠가 바뀌는 UI입니다. 이런 경우는 보통 Android앱에서 자주 사용되었기에 이전부터 ViewPager와 HorizontalScrollView등을 조합해서 사용했지만, 최근에는 Android Support Library, revision 22.2.0부터 추가된 TabLayout과 ViewPager를 조합하는 구현 방법이 선호되고 있습니다.

iOS는 기본적으로 탭이 아래에 배치되거나 위쪽 탭을 스와이프하여 전환하는 방법이 확립되어 있지 않기 때문에 최근에 사용해본 Github에 공개된 PagingMenuController를 추천해봅니다.[/vc_column_text][vc_custom_heading text=”이미지를 다운로드하고 표시하기” use_theme_fonts=”yes”][vc_column_text]

서버에 있는 이미지를 다운로드해서 ImageView에 표시하고자 할 경우, 사용할 수 있는 편리한 라이브러리가 많지만 대표적이라고 생각되는 것들을 추천해보며 같이 사용할 경우 불필요한 트래픽을 줄일 수 있는 DisckCache와 MemoryCache를 추천해 봅니다.

Swift: imageView.sd_setImageWithURL(url);

Java: Picasso.with(context).load(url) into(imageView)

[/vc_column_text][vc_custom_heading text=”JSON” use_theme_fonts=”yes”][vc_column_text]

iOS는 NSJSONSerialization, Android는 JSONObject를 통해 JSON을 직렬화하는 표준화하는 방법이 있습니다. 다만, 표준 방법이 귀찮은 것들이 많기 때문에, Swift언어에서는 SwiftyJSON과 Java객체와 JSON객체 변환을 간단하게 해주는 gson등이 사용되고 있습니다.

[/vc_column_text][vc_custom_heading text=”이벤트 알림” use_theme_fonts=”yes”][vc_column_text]

객체의 상태변화와 데이터베이스 업데이트 결과등의 이벤트를 객체에 알려주고 싶을 때가 있다고 봅니다. 특정 객체에 알림을 하고 싶다면 iOS의 경우 delegate를 사용하고 Android는 콜백에 대한 리스트너를 등록하고 대응하면 됩니다.

여러 객체에 대한 이벤트를 알림이라면 iOS의 경우 NSNotification구조가 표준이며 쉽게 자신의 이벤트 정의나 이벤트를 모니터링할 수 있습니다. Android는 NSNotification정도로 구현하고 싶다면, BroadcastReceiver를 사용하는 방법이 있지만 Intent-filter를 등록하는등이 귀찮아서 otto나 EventBus등의 라이브러리를 사용하는 것을 추천합니다.

Swift

[code lang=”swift”]
//didFinish 이벤트 모니터링(ViewController)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("exam"), name: "didFinish", object: nil)

func exam() {
//이벤트 수신후에 실행하고 싶은 처리
}

//didFinish 이벤트 발생(모델 클래스)
NSNotificationCenter.defaultCenter().postNotificationName("didFinish", object: nil)
[/code]

Java

[code lang=”java”]
// Otto에서는 항상 같은 bus객체를 사용할 필요가 있기 때문에 singleton
public class OttoHolder {
public static final Bus sBus = new Bus();
}

// 자체 이벤트 클래스 정의
public class DidFinishEvent {}

//DidFnish 이벤트 모니터링 시작 (Activity 내에서)
OttoHolder.bus.register(this);

@Subscribe
public void subscribe(DidFinishEvent envent) {
//이벤트 수신 후 실행 처리 내용
}

//didFnish 이벤트 발행(모델 클래스)
OttoHolder.sBus.post(new DidFinishEvent());
[/code]

[/vc_column_text][vc_custom_heading text=”UITest” use_theme_fonts=”yes”][vc_column_text]Calabash

Calabash는 BDD도구로 유명한 Cucumber를 사용하는 UI테스트 프레임웍입니다. Cucumber는 자연언어에 가까운 형태로 테스트 케이스를 만들 수 있는 Ruby기반 테스트 프레임웍입니다. Ruby와 Cucumber문법을 알면 테스트를 만들 수 있습니다. 개인적으로 두개 모바일 운영체제에서 비슷한 UI를 구현하는 경우라면, 하나의 테스트 케이스를 두개의 운영체제에서 실행할 수 있습니다.[/vc_column_text][vc_custom_heading text=”배포” use_theme_fonts=”yes”][vc_column_text]배포도구의 경우 TestFight가 유명하지만 Android앱을 배포하기 어렵기 때문에 두개의 운영체제에 사용할 수 있는 기준과는 다소 차이가 있어 배제합니다.

fabric

Fabric은 트위터사가 제공하는 모바일 개발도구에서 충돌 보고서를 수집, 분석, 앱 배포등을 할 수 있고 완전 무료가 강점입니다.

DeployGate

DeployGate는 최근 나온 서비스로 일본에서 나온 서비스로 개인개발인 경우는 무료이지만, 회사기준으로 개발인 경유 유료플랜이 있습니다.

HockeyApp

앱 배포로 사용하던 곳으로 2개 앱까지는 무료입니다.[/vc_column_text][/vc_column][/vc_row]

Facebook Comments

카테고리:   Swift

댓글

죄송하지만 댓글은 닫혀 있습니다.