江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

Bitriseで特定ブランチだけXcode 7 beta 5を使ってCI

Bitriseはとにかく新しいXcode及びXcode betaでCIできる画期的なサービスです。

Travis CIやCicle CIもGM版が出ればXcode 7に対応してくれると思いますが、待ちきれない方も大勢居るかと思います。

では早速Bitriseのアカウントを作りましょう、gihtubアカウントで登録できて便利ですね。

www.bitrise.io

次にアプリの登録ですがなんとなくやればすぐ出来ると思います。(Travis CIやCicle CIをなんなく使いこなせている人は)

さて本題はmasterブランチはXcode、特定ブランチはXcode-betaでテストしたいという設定です。

Bitriseでは自レポジトリに設定を書くのではなくGUI上でWorkflowをゴリゴリ弄って設定します。

Xcode-betaでテストしたいブランチ名のWorkflowを作成。

f:id:s-aska:20150819111229p:plain

f:id:s-aska:20150819111332p:plain

「Select Xcode Version」を追加

f:id:s-aska:20150819111439p:plainf:id:s-aska:20150819111446p:plainf:id:s-aska:20150819111450p:plain

「-beta」を指定して保存し...、ライブラリの場合は忘れず「Xcode: Create Archive」を消しておきます

f:id:s-aska:20150819111546p:plain

対象ブランチのビルドを実行すると見事Xcode betaでのテストが出来ました!

f:id:s-aska:20150819032329p:plain

めでたしめでたし

Nexus5こわれる

急に再起動したかと思ったら「アプリの最適化」が行われ、「あれ?アップデートしたのかな?」と思って待っていたら、終了後の再起動直後にまたアプリの最適化(以下無限ループ)に陥り困り果てた。

奇遇にもつい先日あんちぽさんがNexus6で同じ現象に陥っていたそうで、同じ手順で復旧できた。

blog.kentarok.org

しかしwifiは復活しなかった、何度も落としていたしモジュールの接触不良だろう、修理には出すが次のメイン機としてNexus6を購入した。

追記 1

明朝思いとどまりY!mobileの修理に出したところ、修理保証に入っていたため〜1600円負担で修理できそうです。

同機種代替機も用意してくれたので助かりました。

追記 2

結局EXPANSYSでZenfone 2 4GB/32GB 買いました。

www.expansys.jp

UIScrollViewが複数ある時でも楽にステータスバーへのタッチイベントを取得する

scrollViewShouldScrollToTopを使うのが常套らしいのだけれどUIScrollViewが複数ある場合、1つを除いてすべてのUIScrollViewやUITextView/UITableViewなどのscrollsToTopをfalseにするのも楽ではないので touchesBegan を使いました。

AppDelegate.swift
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    super.touchesBegan(touches, withEvent: event)
    let touch = touches.first as! UITouch
    let location = touch.locationInView(self.window)
    if CGRectContainsPoint(UIApplication.sharedApplication().statusBarFrame, location) {
        NSNotificationCenter.defaultCenter().postNotificationName("statusBarTouched", object: nil)
    }
}
ViewController.swift
override func viewWillAppear(animated: Bool) {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "statusBarTouched:", name: "statusBarTouched", object: nil)
}

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

func statusBarTouched(notification: NSNotification) {
    
}

github.com

iOSで任意のURLをブラウザ(Chrome)で開いた際に遷移元アプリに戻る導線を付ける

f:id:s-aska:20150518220725p:plain

内蔵ブラウザを個別のアプリで作り込むのはあまり好きじゃなく、かといって外部ブラウザで開くと元のアプリに戻りづらいジレンマがあったが、Google Chromeは元のアプリ名とcallbackスキームが指定でき、これを指定すると画像のようにアプリケーション名でバックボタンが出現する。

仕様は簡単で、

googlechrome-x-callback://x-callback-url/open/?x-source=アプリ名&x-success=コールバックURL&url=開くURL

といったフォーマットでURLを生成し、`UIApplication.sharedApplication().openURL()` するだけ

参考

実装例
gist.github.com

OpenID Connectに対応しました

tasks.7kai.org

移行方法

Google アカウントの認証を OpenID から OpenID Connect に移行する方法 - WebOS Goodies

Google Developer Consoleのプロジェクトの設定で、Google + APIを有効化しないとprofileにアクセス出来ないので注意が必要です。(下記図右下)

f:id:s-aska:20150509204140p:plain


コミット

github.com