サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
パリ五輪
grandbig.github.io
シングルトンを使用したクラスでクラスメソッドとインスタンスメソッドを定義する 本日は、 Swift2.xでのシングルトンパターンのクラスの定義の仕方 そのクラスにおけるクラスメソッドとインスタンスメソッドの定義の仕方 クラスメソッドとインスタンスメソッドの呼び出し方 について見ていきたいと思います。 シングルトンパターンのクラスの定義 まず、シングルトンパターンのクラスの定義の方法を見ていきましょう。 Swift1.2までとSwift2.xでは定義の仕方が異なります。 ここではSwift2.xの場合のみ書きます。
本日は勉強会への参加報告です。 Sansan×SONYアプリ勉強会に参加してきました。 なかなか参加したいアプリ関連の勉強会って少ないんですが、今回は面白そうだなと思って、結構、早めに申し込んでいました。 当日見てみるとキャンセル待ちも数十名になっていたので、珍しく早めに申し込んで良かったなと思いました。 では、早速、筆者が今回の勉強会で得た感想等々を書いていきます。 チームでのiOSアプリ開発 個人で開発するときはさして困らないものの、 チームで開発すると途端に困る…それがコンフリクトであることは周知の事実ですが、 それを如何にして減らしていけるのか そんな話を聞いてきました。 スライドシェアの資料 【コンフリクトが起こった原因】 開発スタイル 命名規則, ハードタブとソフトタブが入り交じる, commitの粒度…は人によって異なる チーム内の基準を設ける必要がある(Cocoa向けコーデ
SwiftLintを使ってコード規約に則ったチーム開発を目指そう! 本日はSwiftLintを紹介したいと思います。 SwiftLintとは チーム内で1つのコード規約に則って開発することを補佐してくれる静的解析ツールです。 JavaScriptであればJSLintやJSHint(最近であればESLintでしょうか)ですし、 Objective-CであればOCLintが主流かと思います。 それのSwift版ですね。 筆者はあまり大規模なチーム開発を経験したことがないので、 SwiftLintを使ったことがありません。 なので、逆に新鮮な心持ちで使い方や良いなと思う点について紹介できればと思っています。 SwiftLintの導入方法 早速、SwiftLintを導入していきましょう。 1.homebrewでインストール 下記コマンドでSwiftLintをインストールできます。 brew ins
GCDとは GCDとはGrand Central Dispatchの略で、iOSアプリでマルチスレッド処理を実行したいときに利用する手法です。 書き方は独特ですが、慣れてしまえば、簡単に使いこなすことができると思います。 今回は筆者が困ったときに使う方法について紹介していきます。 メインスレッドの処理を妨げたくないとき iOSアプリでは描画はメインスレッドでしか実行できません。 (もし、それ以外で実行しようとすれば、アプリがダウンしてしまいます。) 筆者がアプリを開発しているときに、 検証のため、ログをローカルストレージに保存したい場面がありました。 ログ保存処理は一時的な検証のためであり、本来のメイン処理を妨げたくはありません。 ログ保存処理は 描画を含まない処理 であるため、 別にスレッドを立てて、そちらに任せてしまうことができます。 これにより、メインスレッドに影響を及ぼすことなく、
Quickフレームワークを使おう! 先日、XCTestによるiOSアプリのUnit TestとUI Testについて記事を書きました。 もちろんXCTestを使って、テストをすることに問題はありません。 ですが、XCTestは非常に独特な書式で、初めて使う人には取っ付きにくいかと思います。 そんな中、注目を集めているiOSアプリ用のテストフレームワークがQuickです。 GitHubに書かれている通り、RSpec / Specta / Ginkgoにインスパイアされて開発されているため、親しみやすい書式でテストコードを書くことができます。 (筆者もこれを機に親しもうと思います笑) これまでiOSアプリのテストコードは独特で…と避けてきた方がいましたら、ぜひ Quick を導入してみて頂ければと思います。 Quickの導入方法 では、Quickを導入しましょう。 GitHubにも書いてありま
iOSアプリケーション開発でのテストとは さて、本日はiOSアプリケーションを開発する際のテストについて書きたいと思います。 元々、Objective-Cでは下記のテスト用のライブラリが使われてきました。 Kiwi GHUnit Specta しかし、これらはあくまでもObjective-C時代にApple公式のテストフレームワークが充実する以前から活躍していたものです。今後、Swiftが普及するにつれて、これらのテストフレームワークもSwiftに最適化したものになっていくかもしれません。 とは言え、AppleもいつまでもOSSのテストフレームワークがなければならない状況は避け、Xcode内で完結することを目指していくかもしれません。 後ほど詳しく説明しますが、Xcode7からUIテストが新たに追加されたのも、その流れだと思っています。 本日は特に XCTest に焦点をあてた、iOSにお
iBeaconのバッテリ消費量を調査しよう さて、今回はiBeaconを利用したサービスを始める上でネックとなる(正確にはネックと思われがちな)バッテリの消費量について書きたいと思います。 iPhoneでiBeaconを利用する場合、 Bluetooth だけでなく、 位置情報サービス をONにする必要があります。 一般的なユーザのイメージだと、スマートフォンでなるべくバッテリ消費量を抑えたいのであれば、『 Bluetooth や 位置情報サービス をOFFにすべし!!』というのが定説になっていることかと思います。 しかし、開発者からしてみれば、 Bluetooth によるバッテリ消費には疑問があります。というのも現在多くのユーザが持っているスマートフォンでは、搭載されているBluetoothが4.0以上になっていることも珍しくありません。 であるならば、ほとんどのユーザは超低消費電力の
Objective-Cの継承とカテゴリについて さて、本日は今更ですが、Objective-Cの継承とカテゴリについて書きたいと思います。 理由は、最近、自分だけではなく、 『第三者が見てもわかりやすいクラス』 を作ることを意識し始めたからです。 本当に今更ですね笑。 アジェンダは下記です。 Objective-Cの継承 Objective-Cのカテゴリ シングルトンパターンでの継承 シングルトンパターンのクラスを継承したクラスのカテゴリ では、早速見て行きましょう。 Objective-Cの継承 まずは、継承です。 初めに元となるクラスを作成します。 // SampleClass.h #import <Foundation/Foundation.h> @interface SampleClass : NSObject @property(strong, nonatomic) NSStri
iOS9のApp Transport Securityについて調べてみた さて、今月、最終日になんとかブログ更新です。 来週、新型iPhoneの発表が期待される中、開発者間で話題となっているApp Transport Security(以下、ATS)について調べてみました。 ATSの詳細はiOS9 ATS問題などで既に詳しく書かれていますので、割愛します。 どちらかと言うと実開発よりで話をしたいと思います。 これまで筆者はiOSアプリを作り続けてきたわけなんですが、実は会社では所謂ハイブリッドアプリと呼ばれる、 WebViewを用いたアプリ の開発をすることが多く、古くからあるUIWebViewはもちろんのことWKWebViewも利用してきました。 正直、これまで特別な場合を覗いて、 HTTPS を意識することはありませんでした。 しかし、昨今のセキュリティ問題から周りの考え方も変わりつつ
AltBeaconを使って手軽にAndroidでiBeaconを検知しよう 本日はAndroidでのiBeacon検知をやってみようと思います。 自作することも簡単だと聞きますが、Radius Networks社が出しているAltBeaconが非常に便利なようです。 何と言ってもiOSのCoreLocation.frameworkと同じ感覚で扱えるというのが強みでしょう。 (iOSアプリエンジニアにとっては非常に助かります笑) さて、実際に実装方法を見て行きましょう。 実装方法や設定に関しては、Developers.IO Android x iBeacon – シリーズ –を踏襲させて頂きました。 めちゃくちゃわかりやすいサイトなので、他のページも参考にすると良いです。 本記事のAndroid Studioのバージョンは1.2となります。 AltBeaconのライブラリを使うための準備 A
Mapにピンではなく、自分の好きな画像を配置したい!! さて、筆者は思った以上にハマってしまいました。マップを表示して、よく見る赤ピンを配置するまでは余裕だったのですが、如何せんその先が上手くいかず時間がかかってしまいました。ネット上でいろいろとヒントをもらいましたが、なかなかわかりづらかったのでブログにメモしておきます。 Mapを表示しよう iOS6以降から実装されたApple独自のMapを嫌う人もいるかもしれませんが、実装は最も簡単です。(iOS5以前であればGoogleのMapが表示されます。) まず、AnnotationPracticeという名前でプロジェクトを作成します。 例によってLet’s Create an iPhone Appのときと同様にViewControllerの追加まで進めます。そして、今回はMapを表示するので、MapKit.frameworkをライブラリに追加
MKMapViewの中心位置について考えた 本日はMKMapViewの初期表示について説明します。MKMapViewを扱うときにはユーザの位置情報を用いることが多いと思います。そのほとんどの場合、マップを初期表示したときにユーザの現在地を中心にしたいのではないかと思います。しかしながらiPhoneで位置情報を取得するとき、アプリを起動して即座に現在地を特定することはできません。では、『どうするのか?』について失敗談を交えつつ紹介させて頂きます。 まずは失敗例から紹介します。 筆者はユーザの現在地をマップの中心位置に設定するということに意識が向きすぎたせいか当初は下記の手段を取っていました。 下記はViewController.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/Map
Androidでハイブリッドアプリを作ろう 以前、iOSではiOS8からWKWebViewという新しいWebViewが追加されたことを説明しました。 では、Androidはどうなのでしょうか? Androidは4.3までWebKitベースのWebViewをアプリに組み込んでいました。 しかし、Android4.4より、ChromiumベースのWebViewとなりました。ここで、大きく異なるのはレンダリングエンジンが Blink になったというところです。 また、Android4.4まではChromiumがバージョンアップされたとしても、各メーカーがAndroidのOSバージョンアップを提供しなければ、最新のWebViewを利用することができませんでした。 この現状を見たのかGoogleはAndroid5.0以降、WebViewをOSから切り離し、Google Play経由でバージョンアップ
iOS8から追加された新しい機能 CLVisitとCMPedometer さて、久々の更新です。 今更ですが、CLVisitとCMPedometerについて調べてみました。 CLVisitはiOS8以降、CMPedometerはiOS8以降かつM8 モーションコプロセッサを搭載したiPhone6 or iPhone6 Plusでのみ利用可能です。 iOS8はともかく、まだまだ、iPhone6 or iPhone6 Plusは普及しているとは言い難いことでしょう。 実質的に多いのはiPhone5かもしれません…。 しかし、ここはエンジニアとして、1〜2年後を見て、アプリを開発すべきでしょう。 ということで早速、見て行きましょう。 CLVisitで滞在時間を検知 まずは、CLVisitから見ていきます。 CLVisitは特定の場所の滞在時間を取得できるクラスです。 最近、Swiftでソースを書
Xcode6を使った多言語対応 本日はXcode6(正確にはXcode6.1.1)で多言語対応する方法を書きます。 全スクリーンショットを載せます。 まず、多言語化に使うサンプルプロジェクトは下記です。 StoryboardにはLabelとButtonを1つずつ配置します。 ソースは下記とします。 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 29 30 31 32 33 34 // ViewController.m #import "ViewController.h" @interface ViewController () <UIAlertViewDelegate> @property(strong, nonatomic) UIAlertView *alert; @end @impl
Swiftを使ってみよう さて、本日はSwiftの勉強を兼ねて、iBeaconのCentralアプリを開発してみようと思います。もちろんiOS8に対応したアプリを開発します。 これまで、筆者はまともにSwiftを触ってきませんでした。しかし、今後の動向を考えるに、Objective-Cだけでなく、Swiftでの開発もできるようになっておかないと技術者として危険な気がするのです。もし、数年後にXcode上でObjective-Cのサポートを終了するということになったら、途端にiPhoneアプリが開発できない技術者となってしまいます。 とは言え、何もなしに書き方を勉強しようとしても辛いものがあります。なので、これまでObjective-Cで開発してきたアプリをSwiftに移行するという方法でSwiftを学んでいくこととしました。 では、早速、開発を進めていきましょう! 本ブログでは、Objec
iOS7で新たに追加されたSilent Remote Notificationを使ってみよう!! 本日はiOS7から新たに追加されたSilent Remote Notificationについて紹介します。 iOS6までで利用できたRemote Notificationと何が違うのかと言いますと、ユーザ端末のロック画面に表示させることなく通知することができるんです。 つまり、 Remote Notification: ユーザに何かを気づかせるためにプッシュする Silent Remote Notification: ユーザに気づかせることなくプッシュする ということです。 これを見ると、『Silent Remote Notificationって使い道あるの??』なんて思ってしまいそうですよね。これが意外とありそうなんです。 例えば、 ・ユーザに気づかれずにアプリ内の情報を最新に更新する ・ユ
Xcode6でAuto Layoutを使おう! 昨今はiPhone5, iPhone6, iPhone6 PlusなどiOSアプリでも様々な画面サイズに対応する必要性が出てきました。 これまでは2画面の対応だけを考えていれば良かったのに、大きな変化ですよね? では、この対応をどうすれば良いのかというと、『Auto Layoutを使いましょう』ってことです。 では早速説明していきましょう。 StoryBoard上で右下にあるAuto Layoutボタンをクリックします。 ここはXcode5と同じようなんですが、Xcode5と何やら様子が異なることに気づきます。 それは、左右のConstraintが0にも関わらず、StoryBoard上では左右に間隔があいています。 Xcode6で慣れれば良い話なのかもしれませんが、気になるのであれば、下記の箇所から変更できます。 左右のConstraints
はじめに 今回は、iOS14から導入されたWidgetを題材として扱いたいと思います。 既に様々なところで Widget の導入について説明されていますが、筆者が気になったのは、 『プッシュ通知の受信起因で Widget を更新することができるかどうか 』 です。 簡単にサンプルを作成して試してみた結果を備忘録として載せておきたいと思います。 はじめに 先日のWWDC2020で NearbyInteraction Framework というものが発表されました。 これは複数端末間の距離や方角を計測するために利用できる Framework だそうです。 今年はコロナの影響で、ソーシャルディスタンスという言葉が叫ばれるようになったこともあり、意識せざるを得ないような内容に感じられたため、 WWDC2020で行われた『Meet Nearby Interaction』セッション動画を元に勉強してい
Xcode6でプロジェクトを作成しよう さて、先日、一般ユーザ向けにXcode6のバージョンアップが解放されました。 それに合わせて、今回はXcode6の基本的な使い方を確認していきたいと思います。 それでは早速、Xcode6を起動してみましょう。 さて、 Get started with a playground が先頭に来ている以外はあまり気になりませんね。 SwiftやPlaygroundの話は別の機会にということで、 Create a new Xcode project を選択してみましょう。 すると、次のようなウィンドウが表示されます。 筆者はここで、『あれ!?いつも使っていた Empty Application がない….』と気づきました。 まさかと思い、あれやこれやと探し、『OtherにEmptyってのがある。これって前からあったっけ?』と思いつつEmptyでプロジェクトを作
Background FetchとBackground Transferの違いについて 今回はBackground FetchとBackground Transferについて筆者が混同していたことについて書こうと思います。Background Fetchのできることや使いどころは前回書きましたので、そちらをご覧下さい。 もともと筆者がBackground Transferに着目した理由はBackground Fetchでは不可能な長い時間の処理を実現させたいからでした。Background Transferでは見事にその想いを実現できる!!っと思っていました。 しかし、どうやら根本的に理解が間違っていたようなのです…。 Background Transferは時間制限なし, アプリケーションの状態によらない転送が可能な設定があるという特徴があります。そして設定可能なタスクは ・NSURLS
OAuth2Clientを利用したOAuth認証をやってみる 前回はgtm-oauth2ライブラリを利用したOAuth認証について説明しました。 このライブラリは非常に使いやすく、WebViewの実装もやってくれるので楽です。 ただ、1つだけ気になるのが、『このアプリが次のリクエストを許可しています』画面で承認するボタンを押した後に下記のような画面が出てしまうことです。 これは格好悪いですね…。できれば、この画面を出したくない…。 そもそもこの画面が表示される理由は、redirectURIにurn:ietf:wg:oauth:2.0:oobを設定した場合だそうです。 詳しくは山本大@クロノスの日記 – GoogleAPI利用のためにOAuth2.0を使うを確認してください。 gtm-oauth2ではredirectURIを開発者側で設定することなく、ライブラリが自動でやってくれるため、どう
iPhoneのローカルストレージを開発で活用しよう! 本日はiPhoneのローカルストレージ活用方法について簡単に紹介したいと思います。 iPhoneアプリを開発するにあたって、データ保管のためにDBサーバを活用したくなることがあると思います。しかし、個人で開発するにはレンタルサーバを借りるだけでも一苦労…。毎月お金もかかる…。そもそも保存したいデータ量も大きくないし…。なんてことがあるでしょう。そんなときは迷わず、iPhoneのローカルストレージを使いましょう!! FMDBを使おう!! iPhoneローカルストレージを使うなら、非常に便利なFMDBをぜひダウンロードしましょう。 FMDBはMITライセンスということもあり、商用でも簡単に導入できます。 では早速、使い方を説明しましょう。 1: GitHubよりFMDBをダウンロードします。 2: fmdb-master/src/ 配下のフ
Objective-CでUNIX時間を扱うための方法 今日はUNIX時間を扱う方法について紹介します。UNIX時間とはUTCでの1970/01/01 00:00:00からの経過秒数を表したものです。 世界規模でアプリを開発するなら、UTCで時間を扱う必要があります。また、2つの時刻の差を求めるときは引き算をすれば良いので、時間の演算が非常に簡単にできることもメリットです。 すなわち、知っておいて損はないってことです。 では、Objective-cでのUNIX時間の扱い方について早速説明しましょう。 まずは、NSDate型をUNIX時間に変換する処理です。
iOS7.1ならアプリのBackground起動も必要なし!? さて、本日は最近いろいろなところで取り上げられているiOS7.1でのiBeaconについて実際に試してみました。 iOS7から導入されたiBeaconですが、これまではアプリをBackgroundで起動していなければBeaconを検知することができませんでした。しかし、iOS7.1からアプリをBackgroundで起動していなくてもBeaconを検知できるようになったとビッグニュースになりました。でも、本当にそうなんでしょうか?と疑問に思った筆者はSampleアプリで試してみました。 下記がソースです。 まずはBeacon機器としてiPadを用いるためにPeripheralソースから書きます。 とりあえずProject作成の手順は 1: BeaconPeripheralという名称で新規Project作成 2: UIViewCo
Web-APIを使ってJSON形式でデータを取得したい! iPhoneアプリをいざ作ろう!となったとき◯◯のデータを使って、▼▲なアプリが作れたらな〜なんて思うことはないでしょうか? でもいざ作ろうとすると膨大なデータを自分で作ることもできないし、作り方もわからない…。あ〜作れない〜てなことになるでしょう。そんなときは既にどこかの誰かが作ったAPIを使えばいいわけです。世の中にはとても便利なAPIが溢れています(たぶん…) しかし、気をつけておきたいのはそれが無料なのか、商用フリーなのかということです。 Web-APIの例 どのくらい無料&商用フリーで使えるAPIがあるのか探してみました。 ※商用フリーでもライセンス表記など条件があるかもしれないので十分ご注意下さい。 ・OpenStreetMap:Map情報の取得 OpenStreetMap公式ページ ・OpenWeatherMap:天気
iOSのデバイストークンを理解しよう! 今回はプッシュ通知をユーザに送る機能を備えたiPhoneアプリを開発したことがあるエンジニアであれば周知の事実であろう『iOSのデバイストークン』について改めて勉強したいと思います。 筆者は正直、今日まで全くの勘違いをしていました…。デバイストークンとはアプリ毎に異なるのだと思い込んでいたのです。 公式ドキュメントを読もう! まずは何と言ってもAppleの公式ドキュメントから理解してみよう!ということです。 ドキュメントには『APNsが初めてデバイスに接続したときに、APNsからそのデバイスに渡される不透過なデバイス識別子です。(たとえて言えば、デバイストークンは通知先を識別するための電話番号と同じ機能を果たします)』とあります。ここからわかることはデバイストークンとは個人を特定できるユニークなものだということです。 次に読み進めていくと、『APNs
アプリがBackground起動のときでも位置情報を取得しよう! 本日は位置情報を使ったアプリの開発について紹介します。 皆さんはiPhoneを使うとき果たして位置情報サービスをONにされてますでしょうか? スマートフォンが多くの人に普及した近年では、その電池使用量の多さから『電池の使用を抑えるためには位置情報サービスをOFFにしましょう!』と言った声が現実にもネットにもあふれんばかりです。確かに位置情報サービスをONにしているとGPSを使うため、通常よりも電池を消費してしまいます。しかしながら、それ以上に非常に便利で役立つお得なアプリがどんどん世の中に出てきています。また、iOS7からiBeaconをサポートするため、その勢いは留まることを知らないでしょう。 そう、今後は位置情報サービスをONにすることへの抵抗が下がっていく可能性があるのです。では早速、開発について話を進めていきましょう
このページを最初にブックマークしてみませんか?
『Takahiro Octopress Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く