サイトウ

サイトウ

適当な事ばかり書きます
xcode8

Xcode8でBundle IDを設定する

Xcode8でBundle Identifier(以降Bundle ID)を設定する方法。 たしかXcode7あたりから設定箇所が変わりましたよね。 プロジェクトを作る Bundle IDはプロジェクトを作るときに設定する項目から自動的に作成されます。 <Bundle ID> = <Organization Identifier>.<Product Name> Bundle IDを変更する ただ単にBundle IDを変更する場合の手順 1. Project Navigator(左ペインの一番左のアイコン) 2. プロジェクトの設定を開く 3. Bundle IDを変更したいTARGETを開く 4. Bundle Identifierを書き換える Bundle IDをConfigurationで分ける DebugビルドとReleaseビルドでBundle IDを分けたい場合。 1. Project Navigator(左ペインの一番左のアイコン) 2. プロジェクトの設定を開く 3. Bundle IDを変更したい
1 min read
Mac

MacのシェルでISO8601フォーマットの日付を出力したい

最新のdateコマンドでは--iso-8601オプションがあるので簡単にISO8601フォーマットの日付を出力できるけど、Macに同梱されているdateコマンドには--iso-8601なんてオプションが無い。 これはhomebrewでcoreutilsをインストールすれば解決する。coreutilsをインストールすることでgnuのコマンドが使えるようになる。 $ brew install coreutils https://www.gnu.org/software/coreutils/coreutils.html coreutilsでインストールしたコマンドにはgの接頭辞が付与される。 $ gdate --iso-8601 2016-11-30 $ gdate --iso-8601=sec 2016-11-30T12:20:39+09:00 おめでとう。
ios

iOS開発初心者に知ってもらいたい開発スキル

この記事は画像がたくさんだったりしてすごく長いです。 SwiftでiOS開発の勉強をしている会社の新人と話をしているときに実装中のコードを見せてもらうと気になる実装があった。 let action = UIAlertAction(title: "title", style: .default, handler: { (action: UIAlertAction!) in ... }) UIAlertActionのイベントハンドラになるクロージャの引数の型が違う。 このイニシャライザのメソッド定義はこちら。 open class UIAlertAction : NSObject, NSCopying { public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil) } handlerの引数クロージャの引数はUIAlertActionなのに、なぜかUIAlertAction!と書
6 min read
ios

iOSバージョンのシェアとアプリの対応OSバージョン@2016秋

iOSバージョンのシェアとアプリが対応するOSバージョンについて考える。 2016秋っていうのはざっくりとした期間にしたかっただけ。 Apple公式が出しているおおよその数値 2016年10月の時点でiOS8系とそれ以前のバージョンはAppStoreにアクセスしているうち8%ってことみたいですねー。だいぶ減りましたね。 私がかかわっているアプリではfabricをクラッシュレポートとしてとして使っていて、オマケ感覚でfabricのAnswersというDAUとか計測できるトラッキング機能を使用しているのですが。そのアプリだとiOS8系のユーザは3%弱でした。iOS8以降をサポートしているアプリなのでAppStoreとは分母も違うしってところですが、リテラシーが高い人向けというわけでもないアプリでiOS8系ユーザが3%弱ってことは、今後開発するアプリはもうiOS9以降サポートでいいよね!iOS8系は切り捨てちゃっていいよね! ここ数年で「古いOSもきっちりサポートしてよ」みたいな話は聞かなくなってきた気がします。 個人的にiOS8が切り捨てられて嬉しいこと 説
1 min read
Backup

Ghostのバックアップ

このブログはGhostを使っていますが特に今までまともにバックアップを取っていなかったので、バックアップを作成することにしました。 Ghostでバックアップすべきなのはこの2点かなと思っています。 1. /contents 2. /config.js 環境など * さくらVPS * Scientific Linux 6系 * Dropboxのアカウントあり 処理の流れ 1. これらをまとめたディレクトリを作る 2. tarで圧縮する 3. dropboxにアップロードする 4. 残骸を削除 この流れをcronで毎日4時に行うことにしました。 Dropboxにファイルをアップロードする DropboxへのファイルアップロードにはDropbox-Uploaderを使うことにしました。Starも多くユーザも多そうだったので。 cloneするとdropbox_uploader.shはパーミッションが775だったのでchmodする必要はありませんでした。 # /usr/local/src 移動 cd /usr/local/src
2 min read
xcode

iOS10.1 ATS

前回の検証がBeta版だったので安定版でも検証した 検証環境 * iPad Pro 9.7 * iOS10.1 * Xcode 8.1 * Swift3 検証方法 * 非SSLリクエスト先はhttp://www.example.com * SSLリクエスト先はhttps://www.example.com * 非SSLリクエストとSSLリクエストを行い結果を確認する(合計8つのリクエスト) * UIWebView * WKWebView * NSURLSessionで該当URLのソースコードをダウンロードして表示 * NSDataで該当URLのソースコードをダウンロードして表示 * これらのリクエスト結果がATSの設定パターンでどのように変わるのかを比較する 検証手順 * 上記検証方法に対応したプロジェクトを作成して実機起動(シミュレータは実機と異なる動作をすることが多いため) * http(s)リクエストのキャッシュが残らないよう都度アプリを再インストールする * 8リクエストが終わったら次の
1 min read
KH400

KH400の落し物その後

※ この記事は公開し忘れていたもので、現在は直っています。 前回では対応をどうするか決めあぐねていたのですが、今後も板金に絡んだトラブルは起きるだろうと思ったので、今回は家からそう遠く無い板金関係にも強いバイクショップを探して依頼する方向にしました。 バイクショップを信用していないわけでは無いのですが、自分でもできることはしたくて色々と国内外のオークションや中古などインターネット上であされる情報はほとんど見ましたがバッフルはやはり見つからず。 それで、バッフルのスペック情報として見つけたのはこのサイトです。 http://3cyl.com/mraxl/partid/baffles/baffleid.htm http://3cyl.com/mraxl/partid/baffles/sseriespipes/comparison.htm で、KH400についてのおさらいになります。 KH400は350SSからボアアップされた400SSがブレーキや発電系、排ガス規制などでリニューアルされたモデルで、350SS/400SS/500SS/その他マッハシリーズとの共通部品は多
3 min read
ios

iOS10ライフサイクル

先日Xcode8のフレームがどうのって記事を書いたんですけど、そんなことよりライフサイクルだな。と思ったのでシーケンス図風のものを書き出しました。png貼ってますがサイズ大きめです。参考程度に。上から下へ処理が進んで行きます(意味わかるよね? 今回使ったアプリ 確認した内容はこんな感じ + AppDelegate | | | + UINavigationController | | | +-+ UIViewController | | | +-+ UIView(UIViewController.view | + Notification * Storyboard使って、画面遷移などはしていないです * UITabBarControllerも使っていないです(ライフサイクルが結構かわるのですごく長くなるから 起動 その他バックグラウンド/フォアグラウンドなど その他 * バックグラウンドに移行する ≠ フォアグラウンドではなくなる(アプリが見えなくなる) * バックグラウンドに移行したかどうかは did
1 min read
ios10

iPad@iOS10.1でキーチェーンのパスワードが表示されなくなった

iPad Pro 9.7にiOS10 BetaやGMなどを入れていて、安定版が出たタイミングで安定版を入れなおしたりしていたら、Safariでキーチェーンに保存されているはずのパスワードが表示されなくなっていたという問題。 結論 1. 設定.app → iCloud → キーチェーン がオンになっていることを確認 2. 設定.app → Safari → パスワード → Touch IDで認証 3. 設定.app → Safari → 自動入力 → ユーザ名とパスワード → オンにする(オフになってた) https://support.apple.com/ja-jp/HT203783 地味にこういうトラブルは時間がかかって嫌だ。
xcode8

Xcode8 UIViewController.view.subviewsのframeについて(追記しました)

ビューのサイズが1000x1000になる Xcode8からStoryboardやxibでオブジェクトがframe値を持たなくなった影響で、UIViewController.view.subviewsのビューが正常なサイズを取得できなくて困るという話をよく耳にしている。 こんな感じのやつ <UIView: 0x7ff823d04e80; frame = (0 0; 1000 1000); autoresize = RM+BM; layer = <CALayer: 0x61000003dca0>> 自分もこれで困ることはあったけど、まぁ仕方ないからラクしないで修正しようか。くらいの気持ちでした。 検証した まずは通常のライフサイクルを確認する。 UIViewControllerとUIViewを拡張してログ出力するようにした。 // UIViewControllerのログ print("\(Date().description) : \(type(of: self)).\(#function):\(#line)") // UIViewのログ pri
7 min read
ios

UICollectionViewで横スクロールページングのインデックス取得

UICollectionViewでシンプルなページングする横スクロール画面を実装した時に、何番目のセルを表示中か取得しようとしたらうまくいかない状況があったのでほぼメモ。 // Before - (NSInteger)visibleIndex { NSInteger index = NSNotFound; NSArray<NSIndexPath *> *indexPaths = [self.collectionView indexPathsForVisibleItems]; NSIndexPath *indexPath = [indexPaths firstObject]; if (indexPath) { index = indexPath.row; } return index; } // After - (NSInteger)visibleIndex { NSInteger index = NSNotFound; NSArray<NSIndexPath *> *indexPaths = [sel
1 min read
KH400

KH400が落としたバッフル

GWに夏休みとたくさん走ったためか、昨晩なんとなく走りたくなりKH400で出ました。 家を出て5分くらいしてからカタカタという音が聞こえたのでメットのシールドを上げて少しかがんで、やっぱり音がするなと思ったものの、そこまで気にせずに青梅街道を流して数分後、急に改造4mini(ゴリラやエイプなど)のような音が聞こえて来てミラーを見ると自分の真後ろは煙で真っ白でした。 焦って左車線へ寄りちょうど見つけたセブンイレブンに止まりマフラーを確認すると右マフラーのバッフルチューブがありませんでした。直管仕様になっていました。 実はこの数日前にバッフルチューブにグラスウールを巻きつけたところでした。この時のネジの締め付けが問題だったのだと思います。 右気筒はグラスウールを巻く前にも燃調は少し濃いめだったので大きく回さなければ走れると思いUターンをしてから再度同じ道を走ってバッフルを探しました。 バッフルは信号待ちをした地点から数十メートル先の加速した辺り、白線の近くに飛ばされていました。見つけたらすぐさまウインカーを点けヘッドライトを消して路肩に停めて、走って拾いました。 バッフ
2 min read
ios

UniversalLinksを実装した

仕事でUniversal Linksを実装することになったので検証環境を用意した。検証に使用したドメインは www.ikenie3.org 。Universal Links単体の実装というよりはHandoffとUniversal Linksの設定を同時に行っていく流れになりました。雑なので他の人が見ても意味がわからないかもしれないレベルのメモです。 作業内容 1. サーバ: https化 まず http://www.ikenie3.org をhttps化した。 が、必須ではなかったらしい。 URLがhttpsに対応している、もしくはUniversal Linksで使用するJSONファイルが署名されていることが条件ということでした。 証明書に関してはHandoffProgrammingGuideに指定の記載があります。 その際、iOSが信頼する認証局 (http://support.apple.com/kb/ht5012に列挙されている認証局)が発行した証明書とキーを、IDとして 指定します You can perform this tas
6 min read
server

Let's Encryptの証明書を自動更新する

Let's Encryptの証明書でSSL対応を行ったので、Let's Encryptの証明書を自動更新するよう設定しました。 自動更新を行うスクリプト ScientificLinux6.6にSoftware Collectionを使用してpython2.7をインストールしたのでenvの設定が必要でした。 #!/bin/sh # # Cronから実行されるhttps証明書更新用スクリプト # # load bashrc and profiles sudo -u root -i env cd /root # try renew /usr/local/src/certbot/certbot-auto renew -q -q オプションは出力をしない設定です Silence all output except errors. Useful for automation via cron. Implies --non-interactive.
server

WebサイトのSecure証明書設定評価をA以上にする

前回のHTTPS対応に引き続き、今度はQualys SSL LabsというWebサイトでSSLSererの評価を行いました。 設定できました。A+になりました。対応ブラウザもIE6とJava6が非対応ということなので、こんなもんでまぁいいかなと思っています。 参考にしたWebサイトはたくさんありすぎてわけがわからないことになりました。基本的に検証結果で評価が低くなる原因など記載されていたので、それをググって評価を上げていきました。 Ghost.conf ## blog.ikenie3.org server { listen 443 ssl; server_name blog.ikenie3.org; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # https://weakdh.org/sysadmin.html ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-E
2 min read
linux

ScientificLinux6+Nginx+Ghost+SSL+LetsEncrypt

このブログで使用しているドメイン blog.ikenie3.org をhttps対応しました。 今までhttpで済ませていたのは「Secureじゃなくても別にいいかな」という適当な考えだったのですが、httpsの環境を作る必要が出たので対応方法の勉強のために対応しました。 このブログ環境の構成 * サーバ: さくらVPS * OS: Scientific Linux 6 * Webサーバ: Nginx * ブログエンジン: Ghost 最終目標 blog.ikenie3.org をhttpsに対応して、httpのリクエストはhttpsにリダイレクトする。 やったこと OSのアップデート OSはScientific Linux 6といっても6.2と古かったので6.6(final)にマイナーアップデートを行いまいました。 # OSバージョンの確認 cat /etc/redhat-release rpm -qa sl-release --qf '%{v}\n' # リポジトリ更新 sudo yum
3 min read
ios

Swiftでアプリのバージョンチェック

アプリのバージョンチェックを実装するときは、特に何も考えず String.compare: メソッドを使えばいいじゃんと思っていたのですが、 String.compare: だけだと問題がありました。 結論 こんな感じで、 compare:options: で . NumericSearch を指定すればOKでした。 extension String { static func checkVersion(lhs lhs: String, rhs: String) { switch lhs.compare(rhs, options: .NumericSearch) { case .OrderedAscending: print("lhsの方がrhsよりも小さい") case .OrderedSame: print("lhsとrhsは等しい") case .OrderedDescending: print("lhsの方がrhsよりも大
1 min read
KH400

ツーリング用品買い物

もう先月の話ですが、7月頭にGWの代休をもらい私用で帰省しました。もちろんKH400で。 今回の帰省はインカムを使ってみようと思っていて、目星をつけていたのがこちら SENA(セナ) バイク用インカム Bluetooth インターコム 10C カメラ内蔵 10C-01 0410001Kposted with amazlet at 16.07.20SENA(セナ) (2015-08-10) 売り上げランキング: 2,662 Amazon.co.jpで詳細を見る カメラ機能のついているインカム。 実際に使ってみましたがスピーカーのスポンジが自分の使っているヘルメットとは相性が良くなかったのかインナーパッドの装着に難儀しました。音はまぁこんなもんかといったところですが動画が撮影できてカメラで写真も撮れるので走りながら片手で景色を撮れるのは良かったです。 スマホアプリを使って設定をいじれるのも良かったです。 動画は今度アップロードしたいと思っています。 あとついでに買ったのがメロースモークのシールドです。ヘルメットはGT-Airを使っているのですが、今までは標準の
1 min read
KH400

KH400腰上OH準備

家の近くにいつも行列のできる中華料理店があったので行ってきました。その帰りにコンビニ寄って駐車してコーヒーを買って飲んだりしていたら駐車場に停めていると駐車場には何かが垂れた跡が。 よくよく見ると自分のKH400ではなく前に停めていた車が垂らした跡だったようなのですが、、、 ここのところ燃調がうまくいっていないことはわかっていたのですが原因は調査中でした。が、しかし。センターとレフトでシリンダーベースガスケットから何かが漏れていますね。 とりあえずどうやって改善しようか考えます。 1. 腰上OH 2. 増し締め 腰上OHは手持ちの道具では色々と足りないので、まずは増し締めでどの程度改善できるか試してみたいと思います。 といっても今はちょうどパーツクリーナーの手持ちが切れたので翌週末にでも買いに行ってからの確認になるかなあ。。。 その時にはついでにキャブレターのOHとアクセルワイヤーとスターターワイヤーを新調したいと思います。 キャブレターについて最近気づいたのですが、自分の乗っているKH400はA5で、今はを使用しているのですがニードル
2 min read
xcode

iOS10 ATS設定について

iOS10.1で検証しなおして表にしました。 この記事の内容はBeta版の動作です。 iOS10からATS(App Transport Security)の設定が増えるということと、「Webに接続するiOSアプリは2017年1月からHTTPSの使用が絶対条件になる、デベロッパーはご注意を」で色々と騒がれていましたが最近はあんまり聞かないですね。iOS10のリリースも近いはずなのに。 上のリンクのソースはこのPDFのp.100みたいです。 App Transport Security + Required by App Store at end of 2016 + TLS v1.2, with exceptions for already-encrypted buld data like media streaming この件についてはiOS 10のApp Transport Securityと2016年末からのATS必須化についてAppleのエンジニアに聞いてきた(以下、ATS必須化について)で色々とまとめられていますが実際に確認しました。 検証環境 *
1 min read
KH400

引き続きKH400の話

しばらくKH400の記事を書いていなかったのですが元気です。 彼女と結婚するかも→同棲→結婚しない→別れる→一人暮らし再開 な流れをしていました。 その間はあまりバイクをいじる時間が作れなかったのですが、その時から書いていない内容があるので今回は駆け足です。 テールランプのLED化 交換したLEDはこちら。 M&Hマツシマ L8183 R&W L・ビーム (12V) R&W L8183RWposted with amazlet at 16.07.18M&Hマツシマ(エム&エイチ マツシマ) 売り上げランキング: 92,403 Amazon.co.jpで詳細を見る 基本は赤のLEDで、ナンバープレート用に白いLEDが使われているタイプです。KH400にはこの型で問題なかったですがソケットのピンの向きなどもあるので別の車種や改造されている場合は要確認です。 画像だと分かりにくいですが上が電球で下がLEDです。画像だとLEDの方が明るく見えますが特に変わりませんでした。LEDの方が少し明るいかも?くらいです。
3 min read
xcode

XcodeのRunScriptで便利なスクリプトメモ

TODOやFIXME を#warningで表示 スクリプトの実行タイミングはいつでもいい # TODOやFIXMEをワーニング出力 # http://stackoverflow.com/questions/24183812/swift-warning-equivalent TAGS="TODO:|FIXME:" find "${SRCROOT}" \( -name "*.swift" \) -print0 | \ xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | \ perl -p -e "s/($TAGS)/ warning: \$1/" 参考 Fabricのスクリプト実行 実機向けReleaseビルドしたときだけスクリプトを走らせる 最後に実行すれば問題無い # Releaseビルドの実機ターゲットでのみfabricコマンド実行 if [ "
1 min read
Mac

Mac OSX Elcapitanの環境構築メモ

前提 1. brewを使っている 2. iCloudDriveが使える 3. TimeMachineなどでファイル全体のバックアップは存在する 4. brewcaskで色々とアプリを管理している 環境をバックアップ # $HOMEへ移動 cd ~ # FinderのiCloudDriveディレクトリをホームディレクトリ直下にシンボリックリンク作成 ln -s ~/Library/Mobile\ Documents/com~apple~CloudDocs ~/iCloudDrive # 設定ファイルなどを設置するディレクトリを作成 mkdir ~/iCloudDrive/Configs/ # brewfile用のディレクトリを作成 mkdir ~/iCloudDrive/Configs/.brewfile # brewfile用のディレクトリを正規のパスにシンボリックリンク作成 ln -s ~/Library/Mobile\ Documents/com~apple~CloudDocs/Configs/.brewfile ~/.brewfile # brewf
2 min read
Mac

FusionDriveのiMacでMacintosh HDの消去

FusionDriveのiMac(El capitan)でOSの再インストールをしようとしてMacintosh HDを消去しようとしたところエラーが起きた。 大事なデータは外部HDDに保存しているけどHomebrew+Mackupなどで開発環境のバックアップはとっていました。 クリーンインストールの前に 1. iTunes > Store > このコンピュータの認証を解除 2. システム環境設定 > iCloud > Macを探す を解除 参考 * http://itea40.jp/technic/mac-maintenance/el-capitan-initialization/ Macintosh HDの消去 1 1. Command+Rを押しながらMacを起動して、リンゴマークが表示されたら離す 2. キーボードで言語を選択してからディスクユーティリティを起動 3. Macintosh HD 論理ボリュームを選択して 消去 ここでエラーが発生 Core Storage 論理ボリュームを削除できません 参考 *
1 min read
ios

iOSアプリのCrashログをsymbolicateする

iPhoneアプリのクラッシュログからクラッシュの原因を探す。 必要なもの 1. クラッシュログ 2. dSYMファイル クラッシュログを取得 クラッシュログ一覧を表示 Devicesウィンドウを開く Xcode Windows -> Devices (Shift+Cmd+2) 1. デバイスを選択 2. View Device Logs でクラッシュログの一覧を表示 クラッシュログのエクスポート 1. 該当アプリのクラッシュログをCtrl+左クリック(右クリック) 2. Export Log で任意のディレクトリに出力 dSYMファイルを取得 Organizerを開く Xcode Windows -> Organizer (Shift+Cmd+2) 該当アプリのクラッシュしたバイナリに対応するxcarchiveファイルを表示 1. 該当アプリを選択 2. クラッシュした時のビルドをCtrl+左クリック(右クリック)
2 min read