The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

2015-01-01から1年間の記事一覧

2015振り返り

運動 いつも3ヶ月くらいで飽きてましたが、今年は週1走ることを目標にやってみてだいたい達成できました。 ブログ ここ2年くらいさぼてったので、今年は月1くらいで継続的に書くことはできました 2015-01-01から1年間の記事一覧 - Pragmatic ball boy 会…

コード行数の測定

Swiftでコード行数を測ろうとツールを探していたらclocというのがよさげでした インストール インストール方法は思ったよりたくさん用意されていてlinux系だけでなく、node.jsやhomebrew, macports用のも用意されていて、WindowsやMac環境でも楽にインストー…

WebP.frameworkの作成方法

libwebpをclone > git clone https://chromium.googlesource.com/webm/libwebp 最新のをcheckout > git checkout 0.4.4 iosbuild.shを実行 > iosbuild.sh iosbuild.shでautomakeがないとか怒られた場合は以下を入れる Command line tools > xcode-select --i…

Swiftでコマンドラインでカバレッジを取る方法

Objective-Cのときはgcov使ってUnitTestのカバレッジを取っていましたが、 Xcode7から(?)llvm-covが使えるようになったのでこれを使ってみます。 ドキュメントを見ると使い方としては結構単純で、 レポートを出力するには、以下のようにPROFILEとBINを与えて…

3D Touch Peak, Popの使い方

1. 3D Touchの発火元となるviewの登録 UIViewControllerのregisterForPreviewingWithDelegateというメソッドを使って、3D Touchに反応するViewと、3D Touchが発生した際にハンドリングするdelegateを登録します。 override func viewDidLoad() { super.viewD…

iOS9のクイックアクション対応

ホーム画面のアプリアイコンを3D Touchすると実行されるクイックアクションの実装方法です。 Info.plistの変更 UIApplicationShortcutItemsを追加します。 例 Info.plist <key>UIApplicationShortcutItems</key> <array> <dict> <key>UIApplicationShortcutItemIconType</key> <string>UIApplicationShor</string></dict></array>…

Xcode7のCore AnimationのProfilerはiOS9には対応していない

訂正:Xcode7.1では治ってました Xcode7を使って、InstrumentsのCore Animationを使って実機でパフォーマンスを測ろうとしても下の図のように実機を選択することができません iOS8.4の端末を使って試してみたところ選択することができたので、iOS9にはまだ対…

SwiftでUnitTest時に環境変数で分岐させる

テスト対象を@testable import XXXXを使ってimportした場合に、テスト対象のコードをテスト時だけ分岐させて特定の処理を行わないようにしたりしたい場合の対処方法です。 方法としては、環境変数がセットされているかどうかでテストかどうかを判定します。 …

dynamic frameworkを使ってるプロジェクトでコマンドラインでipaファイル作成

Swiftでサブプロジェクトのモジュールをdynamic frameworkで取り込む場合にコマンドラインでipaファイルを作成する手順です。 環境:Xcode7.1 従来のやりかたではできなかったのでメモしておきます 発生した問題 以前Objective-Cでstatic libraryでやってい…

CHANGELOGの自動生成

リリースごとにCHANGELOGをもれなく書くのは結構な手間です。 そこでcommit時にコミットログとしてCHANGELOGを記載しておき、リリース時にそれをまとめて出力することでその手間を削減します。 conventional-changelogを使ってCHANGELOG.mdを生成する方法に…

Swift2 ドキュメントコメント

ドキュメントコメントを記載することで、Option + クリックでメソッドなどの説明を表示したりするようにすることができます。 ドキュメントコメントの指定方法は2通りあり、複数行の場合は/* ... /で囲い、一行の場合は///で始めます。 /** say message */ …

UnitTestでNSUserDefaultsに保存したデータを消す方法

UnitTestだとremoveObjectForKeyや NSUserDefaults.standardUserDefaults().removeObjectForKey("key") resetStandartUserDefaultsを呼んでもデータが消えません NSUserDefaults.resetStandardUserDefaults() 解決方法 setObjectでnilを突っ込む NSUserDefau…

Xcode7でシミュレーターのOSバージョンが表示されない不具合解消方法

Xcode7を使っていたところ、下の図のようにシミュレーター一覧を見ると、OSのバージョンが表示されず、どのOSなのかさっぱりわからなくなりました。。 解決方法 $ rm -rf ~/Library/Developer/CoreSimulator/Devices そしてmacを再起動します

Swift Bond v4

Swift BondがSwift2.0に対応し、更にインターフェースが大きくかわりv4としてmasterに統合されました。 主な変更点としては、 クラス名を刷新 これまではBond、Dynamicといった意味不明なクラス名がObservable, EventProducerに変わりわかりやすくなりました…

Swift2でsubstring

Swift2(beta6以降)でadvance()が廃止され、BidirectionalIndexTypeなどにadvancedBy()が追加されたました。 書き方は以下の様に変わります Swift1.2 var text = "123456" text = text.substringFromIndex(advance(text.startIndex, 3)) // "456" Swift2 var …

Swift2でArrayにArrayをinsertする

これまではsplice:atIndexでしたが items.splice(insertItems, atIndex: items.endIndex) Swift2(beta6以降)からinsertContentsOf:atに変わりました items.insertContentsOf(insertItems, at: 1) 例 var items = ["a", "b", "c"] let insertItems = ["1", "2…

iPadのマルチタスク(SlideOver, SplitView)対応

iOS9からiPadでmultitaskingが使えるようになります。 SlideOverはiPad Air以降、SplitViewはiPad Air2以降で利用できます。 SlideOver, SplitViewに対応したアプリの作成方法 新規で作成する場合 Xcode7で新しいプロジェクトを作ると特に何もしなくてもよい…

Swift2でStringを指定した文字で分割

beta5でsplitの仕様がちょっと変わり、以下のようにすることで文字列を分割できます。 let string1 = "hoge" let string2 = string1.characters.split("o").map{ String($0) } // [h, ge] Swift2からStringはCollectionTypeではなくなり、Stringの保持するch…

SwiftでArray内のOptionalをunwrapする

なにを言っているのかよくわからないタイトルになってますが、 Array<T?>をArrayにする方法です。(Swift1.2以降) いろいろやり方はありますが、一番手短にかける方法は このようにflatMapにかけるだけ let array1: [String?] = ["1", nil, "2"] let array2 = arr</t?>…

iOS9 ATSの設定方法

β4現在 Xcode7でビルドするとiOS9以降でApp Transport Security (ATS) が利用可能となります App Transport Security Technote: App Transport Security Technote デフォルトでhttps通信が必須となるので、この挙動を変更するには上の仕様に書いてあるように…

Xcode7 betaでiOS8.4端末にインストールできない場合

Xcode7 beta3で、iOS8.4の端末をつなげても"ineligible devices"となり、端末が選択できず実機にインストールできない。。 (追記:beta4ではiOS8.4に対応してます) 調べてみると8.4が入ってないです $ ls /Applications/Xcode-beta.app/Contents/Developer…

XcodeのSwiftのFile Templateを変更する

Xcodeでデフォルトで生成される以下のようなtemplateを変更したい場合は // // File.swift // Project_name // // Created by xxxxxxxxxxx on xxxx/xx/xx. // Copyright © 2015年 xxxxxxxxx xxxxxxx. All rights reserved. // import Foundation このように…

Swift2でのbitmask

Swift2からRawOptionSetTypeがOptionSetType (OptionSetType Protocol Reference) に変わったため、 例えばUIViewAutoresizingの場合、 これまでは view?.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight だっ…

Vagrantでjavascriptやcssのファイルを変更しても反映されない

Vagrantでjavascriptやcssを変更しても反映されないという問題にはまりました。 ブラウザのキャッシュの問題かと思ったのですが、Chrome Developer ToolのSettingで"Disable cache"にしても変化なし。 ならばサーバー側だということでnginxのキャッシュとか…

Ansibleでユーザーにグループを追加してもすぐに反映されない

Ansibleでユーザーにグループを追加するのは以下のようなやり方でできます user - Manage user accounts — Ansible Documentation - user: name=hoge group=test append=yes が、この後に、hogeユーザーで、testのグループパーミッションのついたファイルや…

AnsibleでVagrantのprovisioningする際のgitの認証を通すには

ここに書いてあるやり方でいけました。 AnsibleからVagrantにssh経由でgit cloneする時の注意点 - Qiita が、あまり関係ないと思っていた sudo: no が結構重要だったりしました。 gitを実行するTaskをsudoで実行してしまうと、userが変わってしまうのでssh f…

VagrantとAnsibleでFuelPHP開発環境構築(Ubuntu 14.04, nginx)

事前準備 Vagrantのインストール Ansibleのインストール ここではこれらのインストール方法は割愛 環境構築 とりあえず開発環境作りたい場合は、以下を実行し、しばらくすると環境が構築されます。 $ git clone https://github.com/yanamura3/FuelEnv $ cd F…

FuelPHPのインストーラの中身

FuelPHPのインストール時のコマンドでなにをやっているのか調査 $ curl get.fuelphp.com/oil | sh $ oil create fuelphp $ curl get.fuelphp.com/oil | sh では、/usr/bin/oilにhttp://get.fuelphp.com/installer.shを書き込んでる #!/bin/bash PREFIX="/usr…

Ruby on Railsの開発環境構築

Using Vagrant for Rails Development - GoRails のを参考に実施 VagrantとVirtualBoxをインストール Install Vagrant Downloads – Oracle VM VirtualBox $ vagrant plugin install vagrant-vbguest $ vagrant plugin install vagrant-librarian-chef $ cd M…

cocos2d-js 3.xでJS_CallFunctionでcrash

cocos2d-jsを2系から3系に変更した際にjavascriptのコールバックを呼ぶとexec bad accessでcrashするようになりました。 解決方法はこちらで JS_CallFunctionName crashed on iAP finished callback - Cocos2d-x Forum JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJC…