サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
blog.ksoichiro.com
CircleCI は push と pull request 両方をトリガーにすることができない CircleCI は、デフォルトでは push をトリガーにしてビルドするようになっている。 push がトリガーのほうが良いこともあるのだが、GitHub であれば pull request の作成や更新をトリガーにしてほしいこともある。 pull request でのみビルドしたい場合は、 Only build pull requests というオプションを有効にすればいい。 ただ、これはデフォルトブランチへの pull request とデフォルトブランチへの push、タグがビルド対象になるようで、これだけでは不足することもある。 push、pull request の両方を対象にビルドできるようにしたい。 そんな場合は、GitHub Actions で pull request のイ
少し前に検証したものだが、改めて整理。 テーブルAとテーブルBを結合した結果を取得したい場合に、普通にSpring DataのRepositoryを作って@Query のメソッドを定義してもうまくいかない。 例えば以下のようなクエリは表現できない。
APIだとAOPでロギングするのは割と簡単だが、画面の場合にうまいやり方が見つからず試行錯誤したのでメモ。 @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)") などを使えばリクエストの前後に処理を挟むことは簡単。 APIの場合は、バリデーションエラーや例外に対して共通的な処理を入れることは容易いが、画面の場合、バリデーションエラーが発生したら共通エラー画面ではなく元の画面を表示したいし、例外に対しても同じ。 例外に関しては個別のControllerのメソッド内でtry-catchを入れてログ出力すればいいが、バリデーションエラーは画面に表示されるだけでログに出力する方法がわかっていなかった。 基本形 まず、ControllerのRequestMappingが付与されたメソッドの実行
Gradleを実行する時のメモリを調整したい場合、いつでも下記に説明されているようなorg.gradle.jvmargsを使えば良いとつい最近まで思っていた。 https://docs.gradle.org/current/userguide/build_environment.html しかしこのオプションが有効なのは、上記で説明されている通りデーモンとして起動した場合だ。 デーモンとして起動しない場合は適用されないので注意。 だから、gradle.propertiesにorg.gradle.daemon=falseと書いておきながらorg.gradle.jvmargs=...とか書いていても意味がない。 デーモン起動でない場合にメモリなどのJVMパラメータを指定したい場合はGRADLE_OPTS, JAVA_OPTSを使うといいらしい。 (これも上記ドキュメントで説明されているが) 先
Android Gradle Pluginでは、sourceSetsとして以下のようなものが指定できる。 android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } } ディレクトリ構造を変えたくて上記を変更しようとしたとき、上記のうちresとresourcesは何が違うのか?という点がすぐには分からなかったのでメモ。 Gradle Plugin User Guide には以下のように書いてある。 T
とあるきっかけで、ここ1年半近くやってきた、毎日コードを書くことについて振り返ってみようということになった。 実質続いてるのは約一年。始めたのは2014年の3月頃。 約1年前に1週間ほど途切れた期間があるが、そこからちゃんと再開しているので、そこについても言及した方が良いかもということであえて試みを始めてからの期間で1年半と言っている。 これは現時点のコントリビューションの状況。 思いのほか、気づきがあって良かったと思う。きっかけを与えてくれた2人に感謝。 自分がこんなエントリを書くとはおこがましいという感覚があるのだけれど、2人の意見を聞いて、もしかしたらこの話をオープンにしたら誰かの役に立つかもと思い、一度Secret Gistとして書いたものをもう一度時間を取って振り返り、バックグラウンドの説明を含めたりしつつ書き改めてみた。 前置きが長くなったが、これは毎日コードを書くことのような
Spring BootではRuby on Railsのアセットパイプラインのようなものをどうやって実現するのか?というのを調べていた。 Sprinb Bootのバージョンは1.2.3-RELEASE。 以下のSpringのブログによれば、静的コンテンツのハンドリングはSpring Framework 4.1で改善されたらしい。 Spring Framework 4.1 - handling static web resources JavaScriptの開発については、grunt、gulp、Dart、TypeScriptなどネイティブのものを使ってくれ、とある。 確かに、こちらの進化の速度は速いので直接こういったツール等を使う方がいい。結合・圧縮はこちらでできる。 あとは、リソースにフィンガープリントをつける(app-ハッシュ値.cssなど)方法だが、これは"Resource versio
Spring Bootで(というかSpring Securityのような気もするが) ユーザ認証を実装する方法について。 とりあえずハードコードで、という方法は見つかるのだが DBにユーザ情報を格納し ID以外のユーザ情報にもアクセスできるようにする という場合の方法が見つからず苦労したので記録しておく。 概要 以下の作業が必要。 Spring Securityをdependencyに追加する WebSecurityConfigurerAdapterを継承して設定する UserDetailsServiceを継承して認証ロジックをカスタマイズする Spring Securityをdependencyに追加する build.gradleのdependenciesにspring-boot-starter-securityを追加する。 (バージョンは適切なものを選ぶ) dependencies {
Xcodeでは標準でもAnalyzeでClangによる静的解析ができますが、OCLintというツールでさらに多くのチェックができます。 http://oclint.org/ Xcode 5.0.2で試したところ、上記サイトで説明されている手順では導入できず苦戦したので、うまくいった手順を記録しておきます。 まず、環境です。 マシン:Mac Book Air OS:OS X 10.9.1 Xcode:Xcode 5.0.2 以下を導入していきます。 (このうち自分の環境で元から入っていたものの導入手順は割愛します) OCLint:0.8 xctool:0.1.14 CMake:2.8.12.2 Python:2.7.5 Git:1.8.3.4 Subversion:1.7.6 では、導入手順です。 xctoolインストール OCLintのサイトで説明されている、Xcodeでビルドする場合の例
Vagrantfileやセットアップ用のスクリプトをテンプレートとしてGitHubにいくつか登録してみた。 https://github.com/ksoichiro/vagrant-templates セットアップは基本的にすべてシェルスクリプト。 (結果的に、Dockerで書きたくなったときに移植しやすいので良かったかも) Ubuntu上でDockerが使えるテンプレート Macならboot2dockerがあるのでメリットはないが、Windowsでも使えるようにしたい場合に役立つかも? https://github.com/ksoichiro/vagrant-templates/tree/master/templates/precise64-docker Ubuntu上でGitLabが使えるテンプレート 英語、かつバージョンは固定です。 https://github.com/ksoich
[Docker][Android] DockerでAndroidエミュレータを動かしGradleによるビルド&テストを実行 前のエントリ で書いたように、Dockerを使ってAndroidのテストをすることができる。 さらに色々なパターンのテストを試していこうとVagranfile, Dockerfileに続きAndroidのテスト集を作成(以前からあったがいくつか追加)。 https://github.com/ksoichiro/android-tests 以下は、Docker上のAndroidエミュレータでテストをする例。 https://github.com/ksoichiro/android-tests/tree/master/docker-emulator 比較のために通常のGradleによるインストールなども記載してるがメインはサイトの test.sh の実行部分。 ここで A
boot2docker がすごく便利。 でも共有フォルダの設定が現時点ではまだサポートされていないようで・・ 上記のREADMEでもfolder sharingはAdvanced Usageとして書かれている。 上記で紹介されているのが次のPull Requestで説明されている方法。 https://github.com/boot2docker/boot2docker/pull/284 boot2docker initで入るイメージではなく、手を入れたisoに差し替えた上で、vboxsfを使うようにコマンドを実行しなければならない。 これはboot2dockerを起動するたびに実行しなければいけないようなので.zshrcに以下のように書いてみた。 export DOCKER_HOST=tcp://localhost:4243 boot2docker status if [ $? -ne
Android Studioがリリースされて以来、Gradleプラグインをしばらく使っていたものの androidプラグインがjavaプラグインと共存できないせいでいろいろとできないことがあった。 その一つが、カバレッジの計測。 4月末のAndroid Gradle Plugin 0.10.0のリリースでJaCoCoのサポートが追加され、ついにandroidプラグインでもカバレッジ計測ができるようになった。 http://tools.android.com/tech-docs/new-build-system 気づいて早速使おうとしたものの、上記ページに書かれている他はほとんど書かれているところがなくうまく動かず。。。 また、動かそうとしたのが単純なAndroidアプリケーションプロジェクトでなくライブラリプロジェクトであり、Eclipse互換の構造を保とうとしながら作っていたせいかもしれ
今さらブログに書くまでもないかもしれませんが、少し前にAPNsの証明書をアップデートする方法について調べた手順です。 誰かの参考になれば幸いです。 ただし、あくまで検証した時のメモですので、各自の責任でご利用ください。 (現に、これを調べてからここに公開するまでの間に若干動きが変わっていますので…) 前提 Mac OS X 10.8 (Mountain Lion)で作業する。 Member Centerでの作業手順は2013/7時点の仕様に基づく。 手順 CSR作成 Macのキーチェーンアクセスを開く。 左側のツリー[キーチェーン]で[ログイン]を選択し、[分類]で[自分の証明書]を選択する。 右側の一覧上で何も選択されていないことを確認し、メニューの[キーチェーンアクセス] > [証明書アシスタント] > [認証局に証明書を要求…]を選択する。 [ユーザのメールアドレス]、[通称]に適切
基本的なことかと思いますが、しばらく分からず時間を費やしてしまったのでメモします。 UIScrollViewを使って何となくStoryboardでパーツをドラッグ&ドロップするだけで作っていったところ、スクロールしませんでした。 以下の構造を想定します。 以下はStoryboardでのイメージです。 サイズにフォーカスしてStoryboardの内容を掲載します。 まず、ルートのViewは当然ながらウィンドウのサイズになります。 その子ビューとしてUIScrollViewがあり、このサイズは親ウィンドウのサイズにしておきます。 この中身に入るビューの大きさにしないように注意です。 さらにその子ですが、実際に表示したい大きさを設定します。 (ウィンドウより大きいサイズ) そして、ScrollViewとその子ビューのOutletを用意します。 ViewControllerでは以下のようにcont
常識なのか分かりませんが、iOSアプリ開発でのプロビジョニングプロファイルの管理と使い分けに関するメモです。 プロビジョニングプロファイルには大きく分けて Development Distribution の2種類があります。(2013/4/24現在のiOS Dev Center仕様) DistributionにはさらにApp Store用とAd Hoc用があります。 自分の理解では Developmentは、MacにiPhoneを接続して直接インストールする際の署名に使用するプロファイル DistributionのうちApp Store用のものは、App Storeに提出するバイナリ用のプロファイル DistributionのうちAd Hoc用のものは、Ad Hoc配信する場合のバイナリ用のプロファイル という程度のものでしたので、ビルド設定までをバージョン管理しておくとすると リポジト
「 EverForm for iOS」をiPad対応にした際に躓いたポイントです。 iPhoneでは起動画面(Default.png)にステータスバーの高さが含まれています。 (320 x 480 / 640 x 960 / 640 x 1136) しかし、iPadでは含まれていません。(768 x 1004 / 1536 x 2008) これは画像のサイズだけの問題ではなく表示位置にも影響します。 iPhoneではスクリーンサイズの起動画面画像を用意しますがステータスバーの分は隠れてしまいます。 一方でiPadはステータスバーの高さを除いた画像なので、ステータスバーの下から画像が表示されます。 単に起動画面を表示する場合は問題になりませんが、その後の画面とうまく繋げようとすると この差が重要になります。 実際やろうとしたことは以下の二つです。 [1] 起動画面の後、画像の一部を重ねてログ
画像でなくXMLのみで作ったボタンを集めたAndroid用のライブラリをGitHubに公開しました。 RichButtons 使い方は、RichButtons/libraryをプロジェクトとして取り込むか、中身にある実体のXMLを直接プロジェクトへコピーしていただき、 styleで定義済みのスタイルをButtonに適用します。 ライブラリ、とは言ってもグラデーションなどをlayerで重ねただけXMLを集めただけなのですが、、、 1から作ると意外に時間がかかると思うのでよろしければご利用ください。 通常の状態と「pressed」の状態の2種類が定義されているので、タップするとちゃんと見栄えは変わります。 ちなみに端末画像つきのスクリーンショットは以下で作成したものです。 http://developer.android.com/distribute/promote/device-art.ht
Android ActionBarCompatでAndroid 2.xでもタブ+Fragmentを使う時にアクションボタンが切り替わるようにする Android SDKに付属しているサンプルのActionBarCompatを少しだけ改良した ActionBarCompatRevというライブラリを作りました。 ActionBarCompatRev ActionBarを使ったスタイルはAndroid 3.0以降で利用できますが、 実際にアプリ開発をするとなると、まだまだAndroid 2.3などの下位バージョンを考慮する必要があり、デザイン・仕様を共通化するために前述のActionBarCompatなどを使う必要があります。 もちろん、既にActionBarSherlockのような非常に高機能なライブラリも出ていますが高機能ゆえにサイズも大きい、もしバグ(もしくは期待しない挙動)があったときに
Androidの画面遷移の自動テストをする方法として、ActivityInstrumentationTestCase2を使うサンプルを紹介してくださっているブログなどは見かけるのですが、 Fragmentを使った場合のものが見つからなかったのでサンプルを作ってみました。 Fragmentインスタンスの取得方法 ActivityではActivityMonitor#getLastActivity()などでモニタしているActivityのインスタンスを取得できますが、 Fragmentのインスタンスを取得しようとすると、そういったテスト用のメソッドがなく FragmentManager#findFragmentByTag()などで取得するしかなさそうです。 Fragmentの画面遷移のチェック方法 Activityの場合はActivityMonitor#getHits()で呼び出されたかどうかを
Androidアプリ用の入力チェックのライブラリを作りました。 AndroidFormEnhancer 使い方ですが、まずアノテーションで入力フォームの仕様を定義します。 例えば、「名前」の入力欄を 必須 全角 最大20文字 画面上のリソースIDはR.id.textfield_name エラーメッセージの項目名としてR.string.form_nameを使う という場合は以下のような感じでクラスを作ります。 送信ボタンを押して入力チェックする場合、以下のように書くだけでエラーメッセージのダイアログが表示されます。 onSubmitは、送信ボタンのonClickイベントで起動されるもの、と読んでください。 また、フォーカスが外れたタイミングですぐに入力チェックをしたければ、以下のように書いておくとフォーカスアウトの入力チェックが適用されます。 入力チェックのパターンは、以下のようなものを用意
左右にスワイプしてページを切り替えるViewPagerというものがありますが、円形のインジケータを使用したサンプルを作成しました。 viewpagersample 既にライブラリとして ViewPagerIndicator というすばらしいものがあります。が、別のAndroidプロジェクトをいくつも組み込むと環境構築手順やビルド手順も煩雑になりますし、単に円形タイプのインジケータを組み込みたいだけなのでこちらは使いたくない…という方がもしいらしたら、参考にしてみてください。 小さいクラスなので中身もすぐに理解できると思います。
ListViewをカスタマイズして以下のような行のレイアウトを作成しましたが、 クリックできなくなってしまいました。 ListView#setOnItemClickListener()を使っても、クリックのイベントに反応しなくなったのです。 しかしなぜか ListView#setOnItemLongClickListener() は有効でした。 レイアウトは以下です。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" an
Androidのラジオボタンは、HTMLのラジオボタンのようなvalueを持っていません。 「どのRadioButtonが選択されたか」と「選択されたRadioButtonのテキスト」くらいしかそのラジオボタンを特定する情報がありません。 そのため、ラジオボタンの値をDBへ登録しようなどと考えているとリソースIDとコード値の割り当てをハードコーディングすることになってしまいます。 例えば以下のような感じです。 RadioGroup radioGroup = (RadioGroup) activity.findViewById(R.id.radio_group_foo); int checkedId = radioGroup.getCheckedRadioButtonId(); int value; switch (checkedId) { case R.id.radio_button_fo
AndroidプロジェクトでのCheckStyle設定についてです。 Android Open Source Projectのコードスタイルでは、フィールド名はmから開始する、 などのルールがあります。 Code Style Guidelines for Contributors これはコントリビューター向けのものではありますが、自分のアプリの書くコードもなるべくこれに沿っていた方が見やすいかなと思っています。 多くはCode Completeにあるような推奨されるor避けるべき書き方の話なのでAndroid特有のルールというのは実は少ないかもしれません。 そこでCheckStyleでチェックしようとしたのですが、ちょっと苦労したので載せておきます。 Android用のCheckStyle設定を公開してくださっている方がいます。 Checkstyle for Android でもこれ、一部
このページを最初にブックマークしてみませんか?
『blog.ksoichiro.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く