android & ios

CAAnimationで色をアニメーションできないケース(iOS)

はじめに CATextLayerをCABasicAnimationを用いてテキストの色を変えていたのですが、テキストの色が変わらないケースがあり、バグが生じていました。 今回はCABasicAnimationを用いたテキストの色を変化させるアニメーションのバグとその解決策について述べていきたいと思います。 今回の要点 元々の色と、アニメーションで変化させる色が同じだとアニメーションしない CABasicAnimationのremovedOnCompletionプロパティを意識する 画面遷移時にアニメーションを終了させる なお、UIL...

Xcodeでプロジェクト名を変更する方法

適当な "SampleApp" みたいな名前のプロジェクトを作りサンプルを書いて暫く突き進んだら、これでいいじゃん。という流れになって、いやしかしプロジェクト名だけは変えたいなあー。ということがありました。 参照とか色々ありそうだし、こんなことで時間使いたくないなあと思っていたのですがとても簡単でした。 プロジェクトを選択する。 Xcode の右上にある "Identity and Type" を新プロジェクト名に書き換える。 すると diff を表示してくれる。Rename ボタンで変更完了する。 最...

APNSの証明書を作成するスクリプト

同じような記事がいくつかありますが、自分の環境では動かなかったので、自分の環境で動くものを公開します。 第一引数に.certファイルを、第二引数に.p12ファイルを指定してください。 第三引数に証明書を区別するためのサフィックスの文字列を入力してください。「aps_ck_<サフィックス>.pem」という名前で出力されます。 #!/bin/zsh if [[ $# -ne 3 ]]; then echo "ArgumentError: wrong number of arguments ($# for 3)" echo 'arg1={certificate file name(.cer)},...

storyboardの設定項目を一括で更新する

背景 storyboardで画面を作っているときに背景が白や透明のUIViewを配置していると、ぱっと見でどこに置いたかわからなくなり、たいへんつらい時があります。そのため、一時的に背景色を設定することで、storyboard上で作業しやすくすることがあります。 もちもん、設定した色は最終的には無効にする必要がありますが、同じように色を複数変更している場合、1つずつ手作業で修正していくのは大変面倒です。 storyboardの中身はxmlなので、直接編集して一括で変更します。 サンプル 以...

MonacaでgoogleMap設定 (iOSビルド版)

問題 Monacaとmobile backendでアプリ開発中、地図を表示するためにGoogle MapのAPIを利用していますが、DebugアプリやAndroidでは問題なく表示していますが、なぜかiOSでビルドすると上手く表示しません。 原因 原因は設定ではgoogle mapのドメインが許可されていないことです。 monacaが採用したPhoneGap/Cordova の仕様により、セキュリティを守るため、外のドメインアクセスはホワイトリスト登録必要があります。 解決 登録方法: Monaca開発環境でのios/MonacaApp-Info.plistファ...

申請したいアプリ内課金の状態がWaiting For ReviewになってないのでDeveloper Rejectした

iOSでのアプリ内課金のアイテム登録でつまづいてしまって申請をやり直したのでそのときのメモ。 他の人も同じようにつまづくかもしれないし、公式ドキュメントに書いてあることと違うような気がするのでまとめてみたけど、同じようにして解決できなくても責任は負えません。また、2013年12月現在の内容なのでiTunes Connect側の仕様が変わるとこの内容は正しくなくなる可能性もあるので注意して下さい。 要点 アプリがWating For Reviewのとき、リリースしたいアプリ内課金のアイテム...

iOS 64bit対応ではまったところ (書きかけ)

NSInteger CGFloatなどの型 64bit環境では CGFloatはdouble型! #if defined(__LP64__) && __LP64__ # define CGFLOAT_TYPE double # define CGFLOAT_IS_DOUBLE 1 # define CGFLOAT_MIN DBL_MIN # define CGFLOAT_MAX DBL_MAX #else # define CGFLOAT_TYPE float # define CGFLOAT_IS_DOUBLE 0 # define CGFLOAT_MIN FLT_MIN # define CGFLOAT_MAX FLT_MAX #endif typedef CGFLOAT_TYPE CGFloat; あるところで - (CGFloat) tableView:(UITableView *)tableView heightForHeade...

UICollectionView のマージンを詰める

デフォルトだとちょっと空くけど、それを隙間なく埋める方法。 → - (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(160.0f, 160.0f); } - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeIns...

NSFetchedResultsControllerで日付毎にセクションをまとめる方法

この画像は、とあるアプリのWeb閲覧履歴の画面です。CoreDataを使っており、Attribute=timeStamp, type=Date という事にしてアクセス日時順に表示しています。Safariの履歴表示と同じような感じです。 今回ご紹介する方法は、画像のように日付毎にセクション分けしてセクションタイトルを日付にするという方法です。CoreDataのEntityにそのまんまセクション分類用のAttributeを追加すれば簡単ですが、ここで紹介する方法はちょっと違っており、冒頭で紹介した「timeStamp」を元にして...

Cocoapodsをより使いこなすためのTips

こんにちは@huinです. さてみなさん、Cocoapodsをどれくらい使っていますか? 今ではコレなしのiOS(Mac)アプリ開発は考えられないくらいに必須のツールとなったCocoapodsですが、 対応していないライブラリも当然ながら存在します. 自分で書いたちょっとしたライブラリはもちろん、広告SDKなどは対応していないことが多いですね. 毎回ソースを自分のプロジェクトにコピーして...とやってもいいのですが、 どうせならこういったライブラリ群もCocoapodsでまとめて管理したいですよね?...

iosの動画再生かんれんのメモ

AVPlayer Class Reference https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/Reference/Reference.html iOS | How-To Develop an AVPlayer iPAD Application and AirPlay http://klanguedoc.hubpages.com/hub/iOS-How-To-Implement-AirPlay-in-an-AVPlayer-iPAD-Application Tutorial: Easy Audio Playback With AVAudioPlayer http://mobileorchard.com/easy-audio-playback-with-avaudioplayer/ Video On The iPhone Tutorial Part 3,...

横浜 iOS勉強会 第14回 #yidev

勉強会のメモです。 http://cocopon.me/blog/?p=4353 1. Dynamic Typeの基本的なお話, @koogawaさん https://www.slideshare.net/koogawa/dynamic-type iOS7から設定で文字サイズを変更できるようになった。 設定を反映するにはアプリ側で対応が必要。標準アプリだとメールアプリ、メッセージアプリなどが対応している。 Notificationで設定変更検知も可能。 ex.) label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; 導入によるユーザの反応:...

iOS7でカスタムURLスキームでMapアプリに遷移する。

UIActivityViewControllerなどで、Mapアプリに遷移したいときにiOS7から方式が変わったのでメモ。 参考リンク https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html http://ascii.jp/elem/000/000/852/852280/index-2.html サンプルコードはこんな感じ NSString* q = @"http://maps.apple.com/maps?q='渋谷駅'"; NSURL* url = [NSURL URLWithString:[q stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];...

iOSでTDDをしてみる-導入編

簡単なところでFizzBuzzのテストを書いていこうと思います。 https://github.com/akuraru/iOSxTDD/compare/0.1...0.2 クラスの追加 まずは、FizzBuzzというクラスを追加します。今回はこのクラスに対してテストを行います。 テスト対象の追加 今回のテスト対象を追加します。このメソッドに対して0以上の程度の数まで動作を確かめるテストを書いていこうと思います。 @interface FizzBuzz : NSObject - (NSString *)at:(NSInteger)n; @end 実装については適当に空文字を返しておきます...

CALayerのcornerRadiusで円を作る

heathrowブログからの転載です。 円型のUIパーツがほしいときに、画像から作ってもいいんですが、デザイナーさんに頼むのもアレだしPhotoshopとかGIMPとかの画像編集ソフトを起動するのも億劫ですよね。ということでCALayerのcornerRadiusを使って円を作ってみました。 出来上がり コード circleView = [[UIView alloc] init]; circleView.backgroundColor = [UIColor colorWithWhite:0.85 alpha:1]; circleView.layer.cornerRadius = 6; circleView.bounds = CGRectMake(0, 0, 12, 12...

UIbuttonをクラス拡張するとUIImagePickerControllerが使えなくなる。

こんばんはnoppefoxwolfです。 タイトルが釣りっぽくなりましたが、UIbuttonのサブクラスみたいな感じでファイルを生成するとついつい陥りがちなので共有しておきます。 厳密にはクラス拡張をした上で 「initWithFrame:をオーバーライド」し、 「UIimagePickerControlerのsourcetypeをUIImagePickerControllerSourceTypeCameraに指定」すると →アプリがクラッシュします。 クラス拡張なので(?)、@importしなくてもビルドの対象になっているだけで発生します。 何もいじってないのに...

iOSでTDDをしてみる-Kiwi編

今回はBDD系のフレームワークであるKiwiの導入と簡単なコードの説明をしていこうと思います。 https://github.com/akuraru/iOSxTDD/compare/0.2.1...1.0 Kiwiの概要 BDD(振る舞い駆動開発)を支援するためのフレームワークです。要求仕様に近い形でテストコードを記述することが出来ます。Kiwiはモックやスタブ、非同期テスト用の機能が実装されています。 https://github.com/allending/Kiwi 要するにXCTestでは書きづらいテストが多くあるので、書きやすくするフレームワークを使い...

iOSでTDDをしてみる-Kiwi-Expectations編

KiwiのExpectationsについての簡単な解説です。これは、最新情報では無いかもしれません。細かいことについては、公式を見ることをおすすめします。 https://github.com/allending/Kiwi/wiki/Expectations/ 例示を用いてオブジェクトの動作を確認していく仕組みについてです。これはマッチャー式を用いて記述されます。 shouldとshouldNot [subject should]と[subject shouldNot]を用いて期待する動作になるかをテストします。subjectがnil出会った場合でも問題なくテストは動作します...

UINavigationControllerと領域拡張に潜む罠

以下、StoryBoardでレイアウトを組んでいる人には無縁な内容かと思います。 iOS7でのUIの刷新により、「ナビゲーションやタブバーにレイアウトがめり込む」という問題と格闘してきた人は多いと思います。 一方で、「コードベースで書いたUIScrollViewやUITableViewは何の対処もしなくても問題なく動いた」と不思議に思ったり、「xibでデシリアライズしたUIScrollViewに変な余白が発生した」と困惑したりしたことがないでしょうか? 諸悪の根源・暗黙のcontentInsets その原因は暗黙の...

[iOS] Xcode9のUI TestでSafariとか設定を操作して、自分のアプリをテストする

Unit TestよりもUI Testでテストした方が良いことがあります。 Xcode9からXCUIApplicationが強化され、よりUI Testの幅が広がりました。 今回はその中の他のアプリの操作について書きたいと思います。 他のアプリを操作することによって、URLスキームのテストとか、カメラや写真、通知など各パーミッションのテストが可能になります。 SafariでURLを入力してスキームのテスト iOSの設定を操作して、各パーミッションの許可/不許可を変更する TIPS 操作対象エレメントの取得方法がわか...