読者です 読者をやめる 読者になる 読者になる

ローカライズで日本語を追加したのに日本語が表示されずにBaseの文字が表示された(Xcode7)

<問題>
以下の条件でローカライズをして日本語が表示されずにBaseの英語が表示されてしまった。

iPhoneの設定>言語と地域 = iPhoneの使用言語・日本語のみ
・project>localization>Japaneseを追加
・Baseは英語でEnglishのlocalization.stringsは作ってない


<解決方法>
Info.PlistのLocalization native development regionがJapanとなっていたのを
United Statesにしたら正しく動くようになった。

<謎>
ググると優先順位の話とか出てくるけれども
今回は言語設定が日本語のみになっていて
且つJapaneseのlocalizable.stringsが存在しているのに
Baseが選択されて表示される意味がよくわからない、、

プッシュ通知の許可確認

アプリのプッシュ通知の許可をユーザさんがしなかった時、
「プッシュ通知届くように設定してほしいな」というアラートを出したかったので、
設定の通知がオフになっていることを調べる処理を入れようと思ったらハマった(?)


isRegisteredForRemoteNotifications で確認してくださいって書いてあるところが多いけど
これだとregisterNotifications()呼び出した後だとオフラインとかでない限り
設定にかかわらずtrueが返ってきている、、気がする、、
(ここ違うかもしれないので要調査、、)


なので
UIApplication.sharedApplication(). currentUserNotificationSettings() == .None
を使用して判定するのが良い気がする。
http://stackoverflow.com/questions/25111644/detect-allow-notifications-is-on-off-for-ios8


そもそもregisterForRemoteNotifications()を起動毎呼び出すのがまずいのかとも思ったけれど
deviceTokenは変わるものだからregisterForRemoteNotifications()は起動時毎回呼び出すのが一般的なのかと思っていたがそこから間違っているのかしら、、

iOS7でenterprise版アプリをDLできなかった話

【現象】
enterprise版でアプリをダウンロードすると、iOS8ではインストールできるのにiOS7だとインストールできなかった。
以下のメッセージが出てしまう。

「Appをダウンロードできません」”{アプリ名}”は現在インストールできません。

調べてみるとアプリ再起動や一旦放置してみるとかで直ると書いてあったがやはりインストールできず。。

XcodeのDeviceで端末のログをだしてみたら以下のようなエラーが出ていた。

Aug 31 10:44:45 Procyon installd[63] : 0x1d3000 do_preflight_verification: Incorrect architecture at /var/tmp/install_staging.qJquYZ/foo_extracted/Payload/{applicationName}.app


アーキテクチャが正しくありませんと言われている。。
調べてみると、ビルド時の設定が間違っているらしい。

【解決方法】
プロジェクト>BuildSetting>BuildActiveArchitectureOnly
がデフォルトYESになっているけれどもNOにする

【参考】
http://samwize.com/2015/01/14/what-is-build-active-architecture-only/
http://koexuka.blogspot.jp/2014/11/xcode-no-architectures-to-compile-for.html

Build Actice Architecture Only をYESにしてあると現在選択してある端末に合わせたビルドしかしてくれないらしい。

UITableViewでsectionのヘッダーに英字を設定すると大文字になってしまう

題名の通り。↓のようになってしまった、、!
f:id:dakaradame:20150802152725p:plain:w260

iPhoneの設定画面とかは大文字になっているので
こういうものなのかなーと思いつつもそれではだめな時があるので修正しました

コード

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    /// ヘッダに設定するタイトル
    let headers:[String] = [
        "Twitter",
        "Facebook",
        "mixi"
    ]
    
    var tableView:UITableView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let width = self.view.bounds.width
        let height = self.view.bounds.height
        
        self.tableView = UITableView(frame: CGRect(x: 0, y: 0, width: width, height: height), style: .Grouped)
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        self.view.addSubview(self.tableView!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    /** セクション数 */
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.headers.count
    }
    /** セクション内のセル数 */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }
    /** セル */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
   
    /** ①ヘッダの高さを指定 */
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return 60
        }
        // -1を返すとデフォルト値が設定される
        return -1
    }
    /** ②ヘッダセクションに設定するviewを作成 */
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        var headerView = UITableViewHeaderFooterView()
        headerView.textLabel.text = self.headers[section]
        headerView.contentView.backgroundColor = UIColor.redColor()
        return headerView
    }

躓いたところとか

最初②のviewForHeaderInSectionのみでやろうと思っていたのですが
一番目のセクションだけ表示されない問題が、、
f:id:dakaradame:20150802152701p:plain:w260


そこで①heightForSectionで高さを指定しています
これと一緒に使わないとうまく動作しないらしい、、
上記のコードでは毎回60返してしまうと一つ目のセクションヘッダ以外も
広がってしまうんで初回だけ60返すようにしてみました。
ちなみにデフォルトの-1は一番最初のセクションには効かないみたい、、です?
というかデフォルトが0なんだろか、、まだそこまで見ていない

willDisplayHeaderView

メモ書き。
最初willDisplayHeaderViewを使ってやろうと思っていたら
このメソッドが呼ばれない!という事態、、
調べてみたらwillDisplayHeaderViewはUITableViewを継承していないと呼ばれないメソッドだった。
ただ個人的にはUITableViewを継承したくないので却下。
あと継承しなくても、viewForHeaderInSectionを使うと呼ばれた。

出来上がったのがこちら

やったね!
f:id:dakaradame:20150802152708p:plain:w260

Unityでつくってみた

敵が動くようになった、
 
弾の数がすごいことに、、
 
2Dの時はGravityScaleを0にし忘れることが多い
 
f:id:dakaradame:20141216233059j:plain