Category Note

Swift: アプリケーションのスリープを無効にする

すべてのアプリにおいて、開発者が想定している使い方をしてくれるほどユーザーは優しくはありません。 なかにはアプリ使用中にも関わらずいきなりスリープボタンを押す、といった開発側には嫌がらせともとれる想定外の行動をとるユーザーもいます(笑) ユーザーの意思によるスリープを抑止することはできませんが、アプリ側で自動的にスリープしない方法は存在します。 今回は、このアプリのスリープを無効にする方法を説明したいと思います。 目次 アプリのスリープを無効にする まとめ アプリのスリープを無効にする UIApplication クラスのプロパティに idleTimerDisabled という Bool 値があるので、これを true にすればアプリがスリープしなくなります。 以下は AppDelegate の didFinishLaunchingWithOptions 内に記述した場合の例です。 AppDelegate.swift まとめ この設定を行うとアプリがスリープしなくなるので、当然ながら電力の消費量も多くなってしまうことが考えられます。 やみくもにスリープしなくなるアプリも問題ですので、自動的にスリープされると都合が悪い処理が行なわれている部分でのみ 設定を切り替えるようにすればいいかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: WKWebView の userContentController で取得した JSON を使用する

WKWebView は、JavaScript の受け渡しがとても楽に行えるのが大きなメリットです。 単なる文字列としてメッセージ送信を実行すれば、それだけでネイティブ側をコントロールできるのですが、JSON 自体をメッセージで送信し、メッセージハンドラ経由で WKWebView で JSON を受け取ることも可能です。 今回は、メッセージハンドラで JSON を受け取り SwiftyJSON でパースした値を print 出力したいと思います。 目次 準備 JSON を送受信する まとめ 準備 Lead(承) JSON の準備 サーバー側で適当な JSON を用意します。 WKWebView の準備 ViewController に WebKit をインポートし、デリゲートメソッド userContentController を実装しておきます。 SwiftyJSON の準備 そのまま JSON を利用することも可能ですが、今回は JSON へのアクセスを簡単にしてくれる SwiftyJSON をダウンロードし、プロジェクトにインポートしておきます。 これで準備は完了です。 JSON を送受信する 先ほどの JSON をメッセージハンドラで送信、ViewController で受信します。 メッセージ(JSON)の送信 メッセージ(JSON)の受信 userContentController の中で受け取った JSON を SwiftyJSON でデコードし、print 出力します。 結果 まとめ とくに面倒な手順もなく、思いの外かんたんに JSON がネイティブに受け渡せたことと思います。 現在 WKWebView がデファクトスタンダードとなりつつあり、今後は UIWebView から WKWebView への移行は加速していくと思われます。 WKWebView で実現できないことは、セキュリティ上の問題があることが多いはずですので、UIWebView を利用しているアプリがあれば、早めにシフトしておくといいのではないでしょうか。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Xcode: アプリビルド時に dyld`dyld_fatal_error が出た場合の解決方法

アプリのビルド時、dyld`dyld_fatal_error と言うエラーが発生することがあります。 目にする機会は非常に稀ですが、今回はこのエラーが発生した場合の解決方法をメモしておきます。 目次 dyld`dyld_fatal_error が出た場合の解決方法 まとめ dyld`dyld_fatal_error が出た場合の解決方法 Product -> Clean (shift+command+K) でクリーン実行後、ビルドすれば問題は解決します。 まとめ このエラーの解決方法は Clean コマンド一発で済みますが、頻繁に発生するものではなく、どちらかというと開発者側に責任がない(プログラム上に問題がない)ときに起こるため、発生するとすごく焦ります。 自分の場合、開発も終わりに近づき Certificate 周りの変更を Apple Developer 側で行った際に発生しました。 ビルド時おまじないのように、クリーンしてからビルド、という手順が習慣になっていれば、このエラーに遭遇することはまずありませんが、覚えておいて損はないかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: アプリ内でユニーク ID (UUID) を生成する

サーバーからユーザーのユニークな ID を取得し、データ処理を行うことはよくあると思います。 一方アプリからユニークな ID を発行し使用したい場合、ID 生成のためのクラスやファンクションを実装することになります。 今回は、Swift であらかじめ用意されている関数を使用し、ユニークな ID を生成する方法をメモしておきます。 目次 ユニークな ID (UUID) を生成する まとめ ユニーク ID (UUID) を生成する 以下のように NSUUID メソッドを使用すれば、たった1行でユニーク ID (UUID) が生成できます。 UUID 生成 結果 まとめ 上記 UUID メソッドでは 16 進数で 32 桁の ID を生成します。 もちろん、このメソッドでは 100% ユニークな値が保証されるわけではありません。 ちなみに、この方法で生成された ID が被ってしまう確率は、 340,282,366,920,938,463,463,374,607,431,768,211,456 分の 1 (340澗2823溝6692穰9384634垓6337京4607兆4317億6821万1456) です。安心して使わせていただきましょう(笑) この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: WebView を縦スワイプに反応しないよう固定する方法(バウンス無効)

標準ブラウザでは縦方向に長いページをスワイプし、最上段、最下段に到達した時にバウンスする仕様になっていますが、この挙動を望まない場面があります。 アプリに WebView を使用し、プルリフレッシュを実装した際にこのバウンスのせいで、ページ内をプルしたつもりが、WebView 全体が動いてしまうことがあります。 今回はこの WebView 全体を縦方向に動かなくする方法を紹介します。 目次 WebView(画面全体)が縦方向のスワイプに反応しないようにする まとめ WebView(画面全体)が縦方向のスワイプに反応しないようにする WebView には scrollView.bounce と言うプロパティがあり、これが縦方向に画面が動く(バウンスする)かどうかを許可する値です。 この値を false にすることで、スワイプによる画面全体のバウンスが無効になります。 Swift まとめ 今回紹介した方法は、冒頭で説明したように WebView でプルリフレッシュが実装されたアプリ 以外に使い道はない気がするので、そういえばこういうのもあったな、といった程度に覚えておけばいいのではないでしょうか。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: Web (JavaScript) から SKWebView へメッセージを送信する

iOS 8 で登場した SKWebView は JavaScript の実行が速く、UIWebView に欲しかった機能がデフォルトで実装されていて非常に強力です。 iOS もバージョンが 9.X となり、SKWebView もそろそろ市民権を得ている頃なので、これからアプリに WebView を実装する場合は WKWebView でいいかもしれません。 今回はその SKWebView で表示している Web 側から、JavaScript で ネイティブへメッセージを送信する方法を説明したいと思います。 目次 WKWebView の準備 JavaScript から SKWebView へメッセージを送信する まとめ WKWebView の準備 ViewController の WKWebView でメッセージを受信するための準備を行います。 ViewController.swift まず最初に ViewController へ WebKitFramework をインポートします。 次に ViewController へ WKWebView のデリゲート WKScriptMessageHandler と userContentController メソッドを追加し、 viewDidLoad で WKWebView を作成します。 これでネイティブ側の準備は完了です。 JavaScript から SKWebView へメッセージを送信する ここからメッセージ送信の実装となりますが、JavaScript と Swift に分けて説明したいと思います。 JavaScript (Web側) メッセージ送信を行うトリガーとなる Web側のイベントで 以下の JavaScript を実行します。 Swift (ネイティブ側) ViewController に準備しておいた userContentController に以下のような判定を入れれば、ハンドラ名やメッセージの内容で処理を切り替えることができます。 結果 WKWebView で Web サイトを開き 上記 window.webkit.messageHandlers イベントが実行される対象をタップすると、ログが出力されます。 まとめ 上記のように WKWebView を使用すれば、 Web からのメッセージ送信が簡単に行えましたが、他にも UIWebView に比べクラッシュ率が低下、JavaScript の処理が大幅に改善されているといったメリットがあります。 UIWebView の接続先は、他の通信関連 API で操作することが可能なため、セキュリティ的に問題があります。今後特に UIWebView でなければいけない理由がない限り WKWebView を使用することをお勧めします。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Swift: status bar のスタイルを変更する(iOS 9対応)

以前、iOS アプリの上端に表示される ステータスバーを非表示にする方法 を説明しました。 今回、開発中のアプリでステータスバーを表示し、スタイルを変更する必要があったので、ステータスバーを表示する際のスタイルの変更方法をメモしておきたいと思います。 目次 status bar スタイルの変更方法 まとめ status bar スタイルの変更方法 ViewController ごとにスタイルを設定する方法と、AppDelegate で一括して定義する方法があります。 複雑な画面デザインや構成でなければ、AppDelegate で設定してもいいかもしれません。 ViewController に定義 ViewController で preferredStatusBarStyle() をオーバーライドすれば、ViewController ごとに status bar のスタイルを定義することができます。 AppDelegate で定義 開発環境が Xcode7、アプリの対応 OS が iOS 9.x 以降であれば、AppDelegate の func application() にスタイルを記述することで、アプリ起動時に一括して定義することが可能です。 まとめ これまでステータスバーは常に非表示にしてきたため、ステータスバーのスタイルを表示し変更する必要が出た際にやり方が分からなかったため、今回その方法をメモしました。 ゲームやツールアプリでは非表示のものが多いですが、WebView を使用したニュースアプリや、SNS アプリはステータスバーを表示しているものが多く見受けられます。 ステータスバーを表示すべきか否かは、開発するアプリが時間、バッテリー残量、電波等を気にしなければならないようなアプリであれば表示、機能そのものがネイティブで完結するようなアプリなら非表示でいいかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Mac: Bluetooth 接続していないデバイスを一覧から削除する方法

Bluetooth メニューの一覧には過去に接続したものの、現在全く使用しなくなったデバイスが、いつまでも一覧に表示されています。 そのまま放置しても全く問題はないのですが、気になる方もいるかと思います。 今回はこの Bluetooth のデバイス一覧から使用しなくなったデバイスを削除する方法をメモしておきます。 目次 Bluetooth デバイスを一覧から削除する まとめ Bluetooth デバイスを一覧から削除する リストから iPad Air 2 を削除してみたいと思います。 メニューバー > Bluetoothアイコン(※) を オプションキーを押しながらクリック 削除したいデバイス(iPad Air 2) > 「削除」 をクリック 無事、一覧から選択したデバイスが削除されました (※)システム環境設定 > Bluetooth > メニューバーに Bluetooth を表示 にチェックを入れると表示されます。 まとめ オプションキーを使ったメニューへのアクセスは他にも存在しますが、この操作方法を覚えていない限り、なかなか直感的に使用する機会はないかと思います。 今回紹介した方法以外にも、Mac OS X や Apple の標準アプリにはオプションキーを使ったメニューアクセスで解決する問題が数多くあります。 しかし、すべてのオプションキーのコンビネーションを覚えるのは困難なので、通常の操作ではない命令を実行したい時は、とりあえずオプションキーを押しながらメニューを開く、と覚えておけばいいかもしれません。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

iOS: ヒントの通知、SIRIの検索候補を無効にする

iPhone を始めとするスマートフォンを使っている人にとって、プリインストールされているにもかかわらず、全く使わないアプリほど不必要なものはないかと思います。 たとえ不必要でも、プリインストールされているアプリのいくつかはアンインストールできないため、これら使わないアプリを一箇所にまとめているユーザーも多いかと思います。 今回はその中で一番必要のないと思われる、ヒントの通知を非表示にする方法と、SIRIの検索候補の表示・非表示の方法をメモしておきます。 目次 ヒントの通知を無効にする SIRIの検索候補を無効にする まとめ ヒントの通知を無効にする 初めての iPhone ユーザーや、iOS メジャーアップデート直後には必要となるかもしれないヒントも、1週間も経つと不必要になってしまいますが、ヒントのアプリはアンインストールができません。 ここではヒントの通知を表示しなくする手順を説明したいと思います。 手順 設定アプリ -> 通知 -> ヒント の 通知を許可 を オフ にします。 これでヒントの通知バナーは表示されなくなりました。 SIRIの検索候補を無効にする SIRIの検索候補は、ホーム画面から右スワイプ、もしくは下スワイプでのスポットライト検索画面に表示されます。 このSIRIの検索候補を非表示にしたいと思います。 手順 設定アプリ -> 一般 -> Spotlight検索 の Siriの検索候補 を オフ にします。 これでスポットライト検索画面から、SIRIの検索候補表示されなくなりました。 まとめ 近年の iOS は機能が多く、各機能が複雑な階層構造になっているため、設定項目から直感的に目的の機能を切り替えることが困難になりました。 iOS は一度起動すればとくに何もしなくても一通りの操作が行えるように設計されているため、そのしわ寄せが設定に集約されてしまうのは仕方ありません。。。 なるべく使わないアプリは削除したり、設定を切るなどすれば、バッテリー消費もグンと少なくなるので、多少面倒でも定期的に設定項目を見直すことをお勧めします。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Apple: iPad の沿革と iPad Pro 9.7インチを3日間使用した感想

iPad Air 2 から iPad Pro に乗り換えました。 iPad Air 2 は使用していて何の不満も問題もなかったため、意味のある決断となるのか不安でしたが、結論から言うと、乗り換えてよかったと感じました。 今回は 直近の iPad の歴史を振り返りながら、iPad Pro 9.7インチを実際に使用してみた感想を説明したいと思います。 目次 iPad(第3世代)以降の沿革 iPad Pro 9.7インチの感想 まとめ iPad(第3世代)以降の沿革 ページレイアウトの都合上 iPad 第3世代からのスペックとなります。 一目見てこれまでと大きく異なる点が、カメラ機能が大幅に強化されている点ですが、自分自身 iPad で動画、静止画を撮影する機会はほぼなく、当初は Apple Pencil が使えるようになった iPad Air 2 と言う認識でした。 詳しくは次項で説明しますが、iPad Pro 9.7インチの実機を手にした瞬間、この認識は間違いであったと気付かされます。 機種 iPad(3G) iPad(4G) iPad Air(5G) iPad Air 2(6G) iPad Pro(7G) CPU Apple A5X(2コア)1.0GHz Apple A6X(2コア)1.4GHz Apple A7(2コア)1.4GHz Apple A8X(3コア)1.5GHz Apple A9X(2コア)2.16GHz 32Bits 64Bits GPU PowerVR SGX 543MP4(4コア) PowerVR SGX 554MP4(4コア) PowerVR G6430(4コア) PowerVR GXA6850(8コア) PowerVR 7X(12コア) メモリ 1GB 2GB LPDDR LPDDR2 LPDDR3 ストレージ 16/32/64GB 16/32/64/128GB 16/64/128GB 64/128GB/256GB 画面 Retinaディスプレイ 9.7インチ型TFT(IPS) QXGA(Quad-XGA) 画素:2048×1536ピクセル 解像度:264ppi Retinaディスプレイ 9.7インチ型TFT(IPS) QXGA(Quad-XGA) 画素:2048×1536ピクセル 解像度:264ppi フルラミネーションディスプレイ 反射防止コーティング Retinaディスプレイ 9.7インチ型TFT(IPS) QXGA(Quad-XGA) 画素:2048×1536ピクセル 解像度:264ppi 広色域ディスプレイ True-tone ディスプレイ フルラミネーションディスプレイ 反射防止コーティング 通信 Wi-Fi(802.11 a/b/g/n)Bluetooth 4.0+HS Wi-Fi(802.11 a/b/g/n)MIMOBluetooth 4.0+HS Wi-Fi(802.11 a/b/g/n/ac)MIMOBluetooth 4.2+HS センサー 3軸ジャイロスコープ 加速度センサー 環境光センサー 指紋認証センサー(Touch ID) 3軸ジャイロスコープ 加速度センサー 環境光センサー 気圧計 カメラ(バック) HDビデオ撮影(1080p、最大30fps、オーディオ入り) 静止画(5倍デジタルズーム、500万画素) HDビデオ撮影(1080p、最大30fps、オーディオ入り、120fpsスローモーション撮影対応) 静止画(5倍デジタルズーム、800万画素、バーストモード対応) HDビデオ撮影(1080p、最大60fps、オーディオ入り、1080p(120fps) 720p(240fps)スローモーション撮影対応) 静止画(5倍デジタルズーム、1200万画素、バーストモード対応) dual-LED (dual tone) flash カメラ(フロント) 非搭載 HDビデオ撮影(720p、最大30fps、オーディオ入り) 静止画(120万画素) HDビデオ撮影(720p、最大30fps、オーディオ入り) 静止画(500万画素) Retina Flash 接続端子 Apple Dock Lightning バッテリー 電圧3.75ボルト、42.5ワット時のリチウムポリマー電池 最長10時間のバッテリー駆動 電圧3.75ボルト、32.4ワット時のリチウムポリマー電池 最長10時間のバッテリー駆動 電圧3.75ボルト、27.3ワット時のリチウムポリマー電池 最長10時間のバッテリー駆動 電圧3.75ボルト、27.5ワット時のリチウムポリマー電池 最長10時間のバッテリー駆動 サイズ 241.2mm(H)×185.7mm(W)×9.4mm(D) 240mm(H)×169.5mm(W)×7.5mm(D) 240mm(H)×169.5mm(W)×6.1mm(D) 重量 652g 469g 437g 444g iPad Pro 9.7インチの感想 iPad Air 2 はとても完成度が高く、性能面において買い換える理由はありませんでした。 主な買い替え理由は、本体カラーを iPad Air 2 で初めてホワイトゴールドにしてみたのですが、フレームがホワイトであることがずっと不満であったため、次の iPad が出たら再び本体カラーをブラックに戻す、という大したことのない理由でした。 毎日目にするデバイスの色に不満を抱きつつ、使用し続けることが自分にとっては強いストレスだったわけなのですが、実機に電源を入れた瞬間に、それどころではない満足感を得ることとなりました。 True Tone ディスプレイ iPad Pro 9.7インチは iPad Air 2 と外観はほぼ同じなので、開封時に新鮮さはありませんでしたが、電源を入れた時、iPad Air 2 より画面表現が劇的に改良されていることを実感しました。… 続きを読む

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから