技術は私たちの力。技術は私たちの楽しみ。 Creative Developer BLOG 技術部ブログ
Technology is our strength. Technology is what we enjoy.

SwiftでiPhoneアプリを作る

2017-06-16 勉強会
こんにちは。
インターパークシステム事業部所属の山口です。

今回はiPhoneのスマホアプリを作ってみたいと思い興味がてら色々と調べてみました。
スマホアプリの開発は、サスケのオプション機能である『CloudScan』で使用するAndroidタブレットで動作するアプリを作った実績がありましたのでなんとなく仕組みは理解していましたが、AndroidアプリとiPhoneアプリでの開発は全く仕組みも組み方も違い『元javaラー』としては参入障壁が高くなかなか開発に進んでいけませんでした。

せっかくなのでAndroidスマホの開発が出来たのであればiPhoneアプリも開発してみたいと思い
今回勉強会のネタにしてみました。
ではさっそく調査した内容と成果物を発表したいと思います。
なお、iPhone開発言語であるobjective-cとSwiftの違いや今後の展望なども合わせて紹介したいと思います。

iPhoneアプリとは

アプリとは、iPhoneまたはiPadにいろいろな機能を追加することができるものです。

例えば…

iPhoneで家計簿をつけたい→家計簿アプリ
iPhoneでゲームを楽しみたい→ゲームアプリ
iPhoneでスケジュールを管理したい→カレンダーアプリ

そんなiPhoneで○○をしたいといった時に○○を実現してくれるのがアプリですね。

アプリはどこから入手?

アプリを入手するにはご存知の通り「App Store」から入手しますよね。
Androidであれば「Google Playストア」ですよね。

ストアにアップすると誰でもダウンロードすることができるため、アプリをアップロードするには「審査」があります。特にAppleに非常に審査が厳しくソースの中までチェックされるため、Appleが推奨していない書き方が含まれていると審査NG(リジェクト)となり申請者に戻されてしまいます。

また、Appleの場合はアプリケーション審査ガイドラインというものも用意されておりこの規約にそったアプリではないと審査が通らない場合があります。

○アプリケーション審査ガイドライン
https://developer.apple.com/app-store/review/guidelines/jp/

Androidについてはこの点審査が非常に甘く最短で申請から1時間ほどでストアにアップされたりします。
※また、サンプルアプリなどもアップされていたりするので非常に管理は煩雑のようです。

ではiPhoneアプリを作成してみましょうー

では、さっそくiPhoneアプリを作成してみましょう。

どんなアプリを作ってみようーと色々と考えましたが、せっかくCloudScanのアプリをAndroidで作ってみたのでiPhone用のアプリを作ってみたいと思います。

なお、iPhoneアプリを開発するには「mac」PCと開発ツールである「Xcode」という開発統合ツールが必要です。

開発機能

1.iPhoneアプリとスキャナーを接続し名刺をスキャンできること

2.スキャンした画像をアプリで表示できること

3.カメラで名刺を撮影できること

4.サスケにとった名刺画像を送信できること

ではさっそく開発!

さっそくSwiftで開発を行います。
まずはスキャナーと接続するため、ScanSnapの販売元である
PUF社から提供されているScanSnapのAPIを確認すると・・・・・

Objective-CのAPIしかない・・・

困った。。。

じゃーObjective-Cで開発しSwiftに変換出来ないかなー

※実はObjective-Cで開発されたAPIのフレームワークをSwiftから呼び出すことができることを開発途中で知る。

開発の流れ

1.objective-cでまず開発

2.objective-cからSwiftへの変換ツールでソースを変換

3.コンパイル&実機確認

変換ツール(objc2swift-web)

変換ツールはyahooからでている「objc2swift-web」と
いう変換ツール(http://objc2swift.yahoo-labs.jp/)を使用しました。

左の入力枠にhファイルとmファイルセットでコピペすると右の入力枠に変換後にSwiftソースが表示される

objective-Cのコード

Helloと表示する単純なソース
@interface MyClass

- (void)sayHello;

@end

@implementation MyClass

- (void)sayHello{
NSLog(@"Hello");
}

@end

Swiftのコード

Helloと表示する単純なソース
class MyClass {
func sayHello() {
print("Hello")
}
}

苦労したこと

使用したXcodeのSwiftのバージョンが「3.0」で変換ツールが
Swift2にしか対応していないことで大量のエラーが。。。

Apple社の方針なのか分かりませんが言語のバージョンアップでメソッドがなくなったり書き方がガラッと変わる。

心が折れた。

objective-cとSwiftとの違い

objective-c
・C言語の開発体系を踏襲しているため、hファイルやimportファイルなど別ファイルで宣言する必要がある
・また、C言語同様メモリ管理を行う必要があり何か処理都度、メモリの確保/解放を自分で行う必要がある。アプリがどのくらいメモリを使用するかを意識する必要がある。メモリ管理をしないと「out of memory」が多発する。
・非常にわかりにくい言語体系であるため、ぱっとみソースをみてもなんの処理を行っているかわかりづらい。

Swift
・オブジェクト指向言語であるため、クラスなど処理やイベントごとにファイル別に管理が可能。
・非常にソースが読みやすく書きやすい

objective-Cのソース

Swiftのソース

まとめ

iPhoneアプリを初めて開発してみましたが慣れるまで相当時間がかかる印象です。

ただ、スマホ固有のデバイス(カメラ機能やGPSの位置情報、プッシュ通知)などを使用でき多種多様ななアプリを作れるWebアプリーケションにはない魅力があるのではないかと思いました。

最後までありがとうございました!
記事一覧へ