ステータスバーを非表示にする方法(iOS 8)

LINEで送る
Pocket

ステータスバーを非表示にする方法です。
忘れっぽいのでメモです。

プロジェクトの設定

プロジェクトの設定画面からターゲットを選び、「General」タブを選んで、「Deployment Info」の「Hide status bar」をチェックします

ステータスバーを非表示にする方法

Info.plistの設定

先ほどのプロジェクトの設定で「Hide status bar」をチェックすると「Status bar is infinity hidden」が「YES」として追加されているはずなので、それはそのままで。この項目はプロジェクトの設定画面のチェックボックスと連動しているみたいですね。

それとは別に「View controller-based status bar appearance」を追加して「NO」にします。

ステータスバーを非表示にする方法

これでステータスバーが非表示になります

LINEで送る
Pocket

マイクアクセス許可のダイアログをベストなタイミングで表示する

LINEで送る
Pocket

iOS 7からだったかな?アプリがマイク機能を使用しようとすると、アクセス確認のダイアログが表示されるようになりました。

アプリが勝手にマイク機能を使ってこっそり録音したりすることがないように、このように確認ダイアログを出すようにしているわけですね。

ですが、いざ録音しようとしたらダイアログが表示されて、録音のタイミングを逃すということも考えられます。なので、ダイアログ表示のタイミングをアプリ側で上手く調整する必要がありそうです。

例えば先日リリースした「こえにっき」だと、録音ボタンを押した時点でダイアログがでないように、アプリの起動時にダイアログを表示するようにしています。

実際に録音する必要はなく、以下の1行を追加すればダイアログが表示されます

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeAudio, completionHandler: {(granted: Bool) in})

ちなみに、この確認ダイアログですが、1度表示されるとアプリを削除して再インストールしても表示されなかったり、シミュレータでは表示されなかったりと、なかなかデバッグが厄介です。ですが、以下の手順を踏めば表示されるようになります。

1.アプリを端末から削除する
2.設定から日付をずらす
3.アプリを再インストール

若干面倒ですが、これで再表示されます。

LINEで送る
Pocket

UIColorからR,G,Bを取得する方法(Swift)

LINEで送る
Pocket

UIColorからRGBaそれぞれの値を求める方法です
昔はもうちょっと面倒でしたが、iOS5から簡単に取得できるようになりました。

//
// 変数が初期化されていないとエラーになるので、とりあえず1.0で初期化
var red: CGFloat     = 1.0
var green: CGFloat   = 1.0
var blue: CGFloat    = 1.0
var alpha: CGFloat   = 1.0

// 今回は赤でやってみます                
var myColor = UIColor.redColor()
myColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        
println( "R:\(red) G:\(green) B:\(blue) a:\(alpha)" )
// コンソールへの出力結果
// R:1.0 G:0.0 B:0.0 a:1.0

LINEで送る
Pocket

iPhoneのカメラアプリ「リラックスカメラ」をリリースしました

LINEで送る
Pocket

バックカメラで写していると思わせて、実はフロントカメラで撮影しちゃったよ〜というジョークアプリです。

リラックスカメラの機能

友達に撮影を頼んで写してもらえば、友達の油断した表情が撮れるかも?
密かに心寄せるあの娘に撮ってもらえば・・・うーん、自分の若い頃に欲しかったな

カメラプレビューで表示されている画像と実際に撮れる写真が違うので、もしかしたらリジェクトされるかも・・・と思ったのですが、意外と普通にリリースされました。といっても、Appleはリリースしたアプリを突然勝手に削除することもあるので油断は禁物ですが。

無料なのでよかったら使ってみてください。
アプリ内課金で、広告削除と撮影後プレビューのON/OFF機能が追加されます。

ちなみにこのアプリの度重なるテストで、僕のiPhoneのアルバムは間抜けな僕の顔だらけです・・・

LINEで送る
Pocket

iPhoneアプリ「こえにっき」をリリースしました

LINEで送る
Pocket

iPhoneアプリ「こえにっき」をリリースしました。
声で日記をつけよう!というアプリです。

録音機能

録音機能

最大1分の録音を1日3回することができます。
録音ボタンを押している間だけ録音します。(Vineみたいな感じ)

再生機能

再生機能

カレンダーから日付を選んで、その日の日記を再生したり、リスト画面で全ての日記を連続再生することができます。ちょっとぎこちないですが、日付も読み上げるので、他のことをしながら過去を振り返るのも面白いかも。

連続再生

録音データのバックアップ

iTunesファイル共有

iTunesファイル共有でパソコンに録音したデータを保存することができます。
子どもが初めてしゃべった言葉のような、永遠に残しておきたい!という録音があった場合は、この機能でパソコンにバックアップすることができます。

ちなみに、「iTunesファイル共有」は、パソコンアプリのiTunesから接続中のiPhone/iPadを選んで、左メニューの「App」を選んで表示されたページの下の方にあります。少しわかりにくいですね。

アプリは無料なのでよかったら試してみてください

LINEで送る
Pocket

iTunesファイル共有を説明なしに利用するとリジェクトです

LINEで送る
Pocket

「iTunesファイル共有」はアプリのデータ保存領域にMac/PCからアクセスすることができる機能です。

iTunesファイル共有

プログラム的にはInfo.plistに「Application supports iTunes file sharing」を追加して「YES」にすれば利用することができます。とてもかんたん。

iTunesファイル共有

ただ、この機能を使ったアプリをAppleに申請すると「Metadata Rejected」でリジェクトされる場合があります。僕は過去2回経験済みです。忘れっぽいのです。

これは、この機能を使ってはダメってことではなくて、「iTunesファイル共有」を使っていることをちゃんと説明していないため。

おそらく、プログラム側で簡単に利用可能に設定できてしまうため、不用意にデータ領域をユーザーに見せることがないように、親切心で教えてくれているんだと思います。なので、「iTunesファイル共有」を使っている理由をちゃんと説明すればバイナリファイルはそのままで審査は通ります。

説明すれば審査が通るとはいえ、再審査は1週間くらい後になるので、最初の申請時にちゃんと説明した方がよいですね。

LINEで送る
Pocket

iPhoneアプリ「TimeStamp++」をリリースしました

LINEで送る
Pocket

「TimeStamp+」というアプリを公開していましたが、今回はそれの(若干の)進化版です。新しい言語Swiftで全面的に書き直しました。iPhone 6やiPhone 6 plusのでっかい画面にも対応しています。

iOS 8の新機能のToday Widgetにも対応しているので、アプリを起動しなくても利用することができます

ダウンロードはこちらから。無料です。
ダイナミックライブラリっていうのを使っているので、対応OSはiOS 8以降になります。

LINEで送る
Pocket

子ども向けの時計アプリ「こどもクロック」をリリースしました

LINEで送る
Pocket

困ったことに、うちの小学一年生の娘は時計が全然読めません。
というか、「今日はあと何日?」とか「明日は何時?」といった、時の概念が頭の中に存在していないのかと思われる異次元発言も多々見受けられ、将来がいささか不安でもあります。

そんな時計が読めない子ども向けにAndroid用アプリを作成しました。

こどもクロック使い方

基本機能は

  • 「はちじはっぷん」のように時間を唱えれば、その時間を文字盤にスルスルっとセットします
  • 文字盤にセットした時間をロボットっぽく読み上げます

「ロボットっぽく」というのは単にGoogleのテキスト読み上げがそんな感じなので、本当は人間っぽくスラスラ読み上げて欲しいところ。なんでもソツなくこなすGoogleさんの技術力もまだまだ発展途上のようです。

アプリはスマホからタブレットまで対応しています。

Googleの音声認識とテキスト読み上げの機能をフル活用しているので、Androidアプリオンリーです。iPhoneにはSiriっていう音声認識の機能が組み込まれているので、そのAPIが開発者に公開されれば対応できるのですが、しばらくは無理っぽいですね。

よかったら使ってみてください。無料です。

Get it on Google Play

LINEで送る
Pocket

SwiftのプロジェクトにAdMob 7.0を導入

LINEで送る
Pocket

SwiftのプロジェクトにGoogle Mobile Ads SDK 7.0を導入してみました。

7.0からフレームワークという形での配布になったり、公式サイトでの説明はObjective-Cでの説明だったりと、つまずく人はつまずくと思うのでメモしておきます。ちなみに僕はつまずきやすいところでは必ずつまずくタイプ。現実の世界でも、段差があるところは必ずつまずきます。

こちらが公式の説明。英語ですが図が豊富なのでなんとなくわかります。
iOS Quick Start – AdMob iOS Guides — Google Developers

まずSDKを入手します

SDKはこちらからダウンロードできます
Downloads – Google Mobile Ads SDK — Google Developers
2015年2月19日現在、最新バージョンは7.0.0です

プロジェクトに追加する

ダウンロードした「googlemobileadssdkios.zip」を解凍するとできる「GoogleMobileAds.framework」をプロジェクトに組み込みます。「GoogleMobileAds.framework」を組み込みたいプロジェクトにドラックすれば追加されます。

必要なframeworkの10個を追加する

  • AdSupport.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • CoreGraphics.framework
  • CoreTelephony.framework
  • EventKit.framework
  • EventKitUI.framework
  • MessageUI.framework
  • StoreKit.framework
  • SystemConfiguration.framework

Storyboardでバナー用のViewを追加する

こちらも公式の説明そのままです。

プログラムにAdMob呼び出しの記述を追加

Storyboardで作ったバナーとViewControllerを接続します。
これも公式サイトに説明が詳しいです。

接続すると、ViewControllerに
@IBOutlet weak var bannerView: GADBannerView!
が追加されます。

このままではプログラムが「GADBannerView」って何なの?わからない!ってなってエラーがでるので、
import GoogleMobileAds
を追加します。さっき追加したframeworkですね。

AdMobの呼び出しも追加するとViewController.swiftはこんな感じになります。

import UIKit
import GoogleMobileAds

class ViewController: UIViewController {

    @IBOutlet weak var bannerView: GADBannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // AdMob呼び出し
        bannerView.adUnitID = "ca-app-pub-0000000000000000/0000000000"
        bannerView.rootViewController = self
        bannerView.loadRequest(GADRequest())
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

これをシミュレーターで実行すればテストバナーが表示されます。
AdMob表示

LINEで送る
Pocket

Swiftのプロジェクトにレビューへ誘導するダイアログを表示するAppiraterを導入

LINEで送る
Pocket

SwiftはObjective-Cに比べると融通が利かないというか、頑固というか、ちょっとしたことでエラーが出て困りますね。思うように進まなくて非常にもどかしい。

例えば変数の型。型が違うもの同士を計算するだけでエラーです。字はあってるけど書き順が違うからバツ、この漢字はちゃんとはねてないからとバツみたいな恐ろしく厳しい先生みたいです。たぶんその厳しさを乗り越えたら、バグの少ないプログラムが書けるようになるんだと自分に言い聞かせ、Swift先生の愛のムチに耐えながらプログラムを書いています。

そういや、新人の頃に始めて作ったプログラムで安易にキャスト(型変換)を使ってこっぴどく怒られた覚えがあります。型はとても大事。

それはさておき。

アプリのレビューへ誘導するダイアログ表示を簡単に実装できるAppiraterをSwiftのプロジェクトに組み込んでみました。

レビュー誘導のダイアログはユーザーにとっては迷惑なものですが、アプリ制作者としてはちょっとでも反応が欲しかったりするので、組み込むべきかどうか悩ましいところです。その点Appiraterは、アプリをある程度使い込んでからダイアログを出すなど、細かくカスタマイズできて便利です。

このAppiraterですがObjective-Cで書かれているので、Swiftのプロジェクトに組み込むには一手間必要になります。以下その手順です。

Appiraterを入手する

まずはともあれAppiraterをダウンロードします
Appiraterダウンロード

ダウンロードできたら「appirater-master.zip」を解凍してプロジェクトに追加します。「appirater-master」フォルダをぐわっと組み込みたいプロジェクトにドラッグすれば追加できます。CocoaPodsとか使うと簡単なのかな?とりあえず今回は自力で追加です。

Appiraterをプロジェクトに追加する

必要なフレームワークを追加する

ここまではObjective-Cの時と変わりません。
ターゲットを選んで、「General」の「Linked Frameworks and Libraries」でフレームワークを追加します。追加するのは「CFNetwork.framework」「SystemConfiguration.framework」「StoreKit.framework」の3つです。 「StoreKit」だけはOptionalで。

必要なフレームワークを追加

特別なヘッダファイルを作る

swiftからObjective-Cのソースを参照できるように、特別なヘッダを作成します。作成するファイル名は
(ターゲット名)-Bridging-Header.h
です。今回は「AppiraterDemo」ってターゲット名なので「AppiraterDemo-Bridging-Header.h」を作成します。

特別なヘッダファイルを作る

この作成したヘッダファイルに

#import "Appirater.h"

と記述します。Objective-Cのソースを参照したい場合、そのヘッダファイルをここにどんどん追加していくわけですね。今回は「Appirater.h」だけ追加。

で、プロジェクトのビルド設定の「Swift Compiler – Code Generation」の「Objective-C Bridging Header」に作成したヘッダファイルのパスを記述します
今回は
AppiraterDemo/AppiraterDemo-Bridging-Header.h
を設定
パスを設定

プログラムに組み込みます

AppDelegate.swiftにイニシャライザを追加(自動で作られるソースにはないはず)して、Appiraterの初期化処理を書きます。普通にSwiftのコードでかけるのがすごいですね。

override class func initialize() {
    Appirater.setDebug(true)        // デバッグ(必ずダイアログを表示)
    Appirater.setAppId("123456")    // アプリのAppId(自分のアプリIDに変更)
    Appirater.appLaunched(true)
}

これで実行すれば、ダイアログが表示します。簡単簡単。

ダイアログ表示

・・・と思ったらアプリ名の部分が(null)になってますね。(null)なんてアプリ名にした記憶は全くないのに!

これは「CFBundleDisplayName」を設定していないからです。CFBundleDisplayNameはinfo.plistで設定できますが、ここに追加してもダメなので、新規に「InfoPlist.strings」というファイルを作る必要があります。新規ファイルの作成して、ResourceからString.fileを選んで作成します。

ダメな例。ちゃんと追加しているのにアプリ名が(null)になります。
info.plistに追加

アプリ名を国ごとに変えたい場合にも必要になるので、ここは素直にInfoPlist.stringsを作ります。
InfoPlist.stringsを作成

そのInfoPlist.stringに

CFBundleDisplayName = "Appiraterデモ";

と記述して実行してみると・・・

ダイアログ表示

無事アプリ名が表示されました。
Appirater自体の設定は、丁寧に説明してくれているサイトがすでにたくさんあるので、ここでは割愛します。

LINEで送る
Pocket