iOSDC2021に参加しました

去年に引き続きオンラインでの開催ということで、毎年恒例の雨でも影響ないのが良いところですね。 前夜祭には参加できなかったのですが、本編2日間楽しかったです。 セッションはどれも気になる内容ばかりで選ぶのが大変でした。 無料ユーザーでもタイムシ…

iOSDC Japan 2019 に行ってきた

9/6,7 に開催された iOSDC 2019 に参加してきました。 iosdc.jp 印象に残ったセッション 参加したセッション、LTすべて楽しかったです。 毎度のことながら、全部参加できたらいいのにという状態でした。 参加できなかったセッションについても、動画公開され…

2018年振り返り

今年も無事終わってよかった。 お仕事 年明けくらいからiOSチームのリーダー&Androidチームのタスク管理とかするようになった 自分でもコード書くけど、若者が手を動かしやすいように雪かき業とか進んでやってる 何度かのリリースを無事に終えられて良かった…

UICollectionViewのスクロールバーがセクションヘッダに隠れないようにする

iOS

環境 iOS12.0 Xcode Version 10.0 (10A255) Swift4.2 問題 UICollectionViewのセクションヘッダを表示する必要があって、実装してみたらスクロールバーがセクションヘッダの下に隠れてしまったのでなんとかしたかった。 解決策 UICollectionViewDelegateの c…

UIPageControllerの選択しているドットを大きくする

iOS

環境 iOS12.0 Xcode Version 10.0 (10A255) Swift4.2 やりたいこと こんな感じにUIPageControllerの選択中のドットを大きくしたい カスタマイズしたUIPageCotrollクラス class CustomPageControl: UIPageControl { private static let defaultDotSize: CGFlo…

ナビゲーションのタイトルカラーを画面ごとに変更する

バージョン Xcode Version 10.0 (10A255) Swift4.2 やりたいこと 最初の画面はタイトルカラー赤 遷移先の画面はタイトルカラー青 実装1 ググるととよく出てくるやつ。 ただ、これだと最初の画面に戻った時に青のままです。 遷移元ViewController class ViewC…

Swiftのランタイムエラーを捕捉する

アプリがクラッシュした際に、ちょっとした後片付け的な処理をしたくて調べてた。 バージョン Xcode 9.4 Swift4.1 NSSetUncaughtExceptionHandler ググると、これがよく引っかかる。 NSSetUncaughtExceptionHandler(_:) - Foundation | Apple Developer Docu…

ユニバーサルリンクでiOSアプリが開けない場合の対策

iOS

アプリ開発中に、デザイナーさんが作ってくれたプロトタイプをProttViewerで開こうとして発生した事象です。 困っていたら、同僚がRadarのリンクを教えてくれて解決しました。感謝。 ProttViewerで発生した事象ですが、他のアプリでも発生します。 iOSバージ…

fastlane で空のgit commitを作る

はじめに fastlane で git commit --allow-empty が必要になってやり方を調べました。 バージョン fastlane 2.85.0 方法 以下のどちらかで。他にもあるかもしれない。 # test.rb lane :test do # Actions.sh 使う方法 Actions.sh('git commit --allow-empty …

find+xargsのよくある処理で空白を含む名前のファイルを扱う

はじめに findとxargsを使って、複数ファイルをまとめて処理するのはよくやると思います。 が、とくにオプションとか考えずにやると空白混じりのファイル名があった時に、エラーで怒られます。 space_files $ ls -la total 24 drwxr-xr-x 5 sumida staff 170…

画像とラベルを縦に並べるUIButtonのカスタムクラス

はじめに たまに必要になるので、こんな感じに画像とラベルを縦に並べるUIButtonのカスタムクラスを作りました。 contentEdgeInsetsとか毎回調整するのめんどくさいですよね。 探せばライブラリとかもあるとは思うけど勉強も兼ねて車輪の再発明です。 コード…

2017年振り返り

個人の日記なので2017年の振り返り。 お仕事 ご縁があって11月から渋谷にある事業会社でiOSアプリ開発者として働いている。 春先、前年から開発していたiOSアプリのリリース延期が決まりモチベーションが下がっていたところに、今の会社の人に声をかけてもら…

Swiftでクロージャが入れ子の場合のキャプチャリスト

はじめに Swiftのクロージャには循環参照を回避するための仕組みとしてキャプチャリストがあります。 最近、キャプチャリストがあるのにメモリリークするというバグに遭遇して、自分の認識が間違っていたことが分かったのでメモしておきます。 結論としては…

iOSで画像をリサイズして保存するときに気をつけること

はじめに カメラロールからユーザーが選んだ画像をUIImageViewに表示してから、リサイズしてファイル保存する際に、ちょっとはまったのでメモ。 バージョン Xcode9.0.1 Swift4.0 やりたかったこと ユーザーが選択した画像ファイルを一定の幅にリサイズして保…

UIVIewController.viewの生成タイミング

Instantiateというライブラリがあります。 github.com StoryboardやXibを使いつつコンストラクタインジェクションできる素敵ライブラリなのですが、コードを読んでてよくわからなかったところがありました。 Instantiate/Storyboard+UIViewController.swift …

祝日や会社の休日に起動しないSlack通知bot

はじめに 平日の18時に行っている夕会用に、開始時間になると曜日ごとのファシリテータをお知らせするbotを運用中。 土日祝日と会社指定の休日は通知飛ばないようにしてます。 祝日判定のためにGoogleAppsScriptとGoogleカレンダーを利用してます。 Googleカ…

Linux上で特殊文字を含む名前のファイルの削除方法

はじめに コマンドの操作ミスやスクリプト出力の文字化けなどで特殊文字を含む名前でファイルができてしまい、単にrmコマンドでは削除できない時の削除方法。 いざという時のためにメモ。 実験用のファイル temp $ ls "ccc.txt -bbb.txt aaa.txt temp $ 他に…

iOSDC Japan 2017に行ってきました

子どもができてからというもの、なかなか勉強会やイベントに参加できなくなっていましたが、久々に参加してきました。 iosdc.jp かなり悩みつつセッションの選択をしたなかで、特に印象に残ったものをあげます。 両OSやるマンという選択 speakerdeck.com 実…

Swiftはプロパティもオーバーライドできる

バージョン Swift 3.0.2 Xcode 8.2.1 クラスのプロパティ 知らなかっただけなのですが、Swiftはプロパティもオーバーライドできます。 使い方次第で便利に使えそう。 サンプルコード プロパティのオーバーライドとプロパティ監視を組み合わせて、ボタンが無…

UIViewからUITableViewのカスタムセルを作るとボタンタップイベントが取れない

現象 UITableVIewのカスタムセルにボタンを置いて、タップ用の処理を書いたがタップイベントを検知できない。 原因 ボタンの上のレイヤーに、UITableViewCellContentView というビューが描画されており、このビューに邪魔されてタップイベントが検知できてい…

2016年の振り返り

今年もあんまりブログ書けなかったけど、振り返りはしておく。 お仕事全般 こまごまPHPもやったけど、ほぼSwiftでiOSアプリ開発ばっかりだった。 チームでのアプリ開発を経験できたり、RxSwift触ってみたり楽しかった。 プチSCMBCとかを開催して、ちょっとず…

配列の要素をオプショナルバインディング

はじめに コードレビューで、ちょっと不思議なコードがあったのでメモ。 結論 配列の添字アクセスをオプショナルバインディングしてもビルドエラーにならないけど、わかりにくいのでやめたほうがいい。 コード var hoge:[Int] = [] // hogeを更新する処理な…

PHPで画像やcssの404エラーでセッション切れになる現象

PHP

はじめに FuelPHPを使っていて、セッションが切れることがあり調査していました。 ググるとドキュメントルートにファビコンが存在していないと発生するなどの記事がヒットするのですが、ファビコンだけでなく読み込んでいる画像やcssがなくても同じ事象が発…

Sketchで透過オブジェクトを含むグループごとスライスする

はじめに 最近、PhotoShopの代わりにSketchを使うことも増えてきました。 SketchはMake Exportableで@2xや@3xもまとめて簡単に切り出せていいなーとか思ってたら、よくあるアイコンの下に固定サイズの透過オブジェクトがあるパターンで、グループごと切り出…

iOSで表示要素を動的に消して親ビューの高さを変える

はじめに ログイン前後で表示要素の数を動的にし、ビューの高さを変えるという仕様があり、実現方法を調べました。 意外とめんどくさかった。もっと効率の良いやり方もありそうです。 バージョン XCode Version 7.3.1 (7D1014) サンプル ラベル2つとボタン1…

PHPのDateTimeクラスを使って日時の差分を取る時に注意すること

php

はじめに とても今さら感のあるネタですが自分用にメモ。 プログラムで日付や時間を比較して何かを処理したい場合は多いはず。 PHPだとDateTimeクラスというのがあって、比較演算子==や>や<などが使えます。 大小比較だけでなく、日時としての差分を取るため…

FuelPHPでデフォルトのタイムゾーンと異なるタイムゾーンの日付を取得したい

はじめに 通常、FuelPHPにおけるタイムゾーンは`fuel/app/config/config.php`の`default_timezone`で設定します。でも、ある日付を別のタイムゾーン、例えばUTC(協定世界時)に変換したい時ってありますよね。WebAPIの日付指定がUTC限定だったり。そんな時…

Vagrantのベースボックス更新をするスクリプト

はじめに 最近、仕事でVagrantを使って仮想環境を構築して使うことが多いです。 たいていの場合、最初にここからベースボックスを取得して、パッチ更新、各種ミドルウェアのインストールなどをしてメンバーに配布します。 開発を進める中で、ボックスの内容…

PHPのsimplexml_load_file()でXMLを扱うときに注意すること

PHP

はじめに XMLは、JSONと違って同じ名前の要素を複数持つことができるのですが、PHPのsimplexml_load_file関数で扱うときにちょっとめんどくさかったのでメモ。 もっといい解決策があるかもしれません。 実験 入力XML list1.xml <data> <book> <title>Swiftではじめる iPhoneア</title></book></data>…

ランダムにタスクを割り当ててSlackに通知するbotを作った

はじめに 先日公開された下記のスライドを社内に紹介したところ、とあるディレクターさんからランダムにタスクを割り当てるbotについて聞かれたので適当につくってみました。 あなたのチームの「いい人」は機能していますか? from Minoru Yokomichi www.sli…