android & ios

App ExtensionでCocoaPods管理しているライブラリを使用する2つの方法

修正 potatotips (iOS/Android開発Tips共有会) 第9回での発表資料が新しい情報になります。 App ExtensionでCocoaPods管理しているライブラリを使用する方 https://speakerdeck.com/tmnb/app-extensiondecocoapodsguan-li-siteiruraiburariwoshi-yong-surufang -- iOS8の新機能App Extensionを開発する中で、CocoaPodsで管理しているライブラリを使用したくなるケースが必ずでてくると思います。そこで2つの方法を紹介したいと思います。 ※ https://www.facebook.com/groups/ios.dev.j...

WKWebView で Basic 認証がかかったページへアクセスする方法

WKWebView では WKNavigationDelegate の webView:didReceiveAuthenticationChallenge:completionHandler: を実装することになります。 認証が必要なサイトにアクセスした場合、ユーザー名、パスワードの入力を求めるアラートを表示するようにしてみました。 func webView(webView: WKWebView!, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!) {...

- [UIImageView setImage:]の挙動について

現象 このようなコードを実行した際に、imageView.imageが<UIImage 画像a(インスタンスB)>になることを期待していましたが、実際は<UIImage 画像a(インスタンスA)>のままでした。 異なる画像のインスタンスを設定した場合は意図した挙動になるので、同じ画像の際はパフォーマンスのためにこのような挙動になっているのだと思います。 UIImageView *imageView = // imageView.image = <UIImage 画像a(インスタンスA)>; imageView.image = <UIImage 画像a(...

UIImageを縮小するメソッドで、縮小元の画像が小さすぎる場合エラーが出る

http://d.hatena.ne.jp/eisenbach/20111108/1320753534 ↑こちらを参考に、というかそのままコピペして、UIImageを縮小するメソッドを作ったのだが、特定の画像でエラーが出てしまう現象が発生した。 エラー内容は以下。 CGBitmapContextCreate: invalid data bytes/row: should be at least 2560 for 8 integer bits/component, 3 components, kCGImageAlphaNoneSkipLast. どうやら画像が小さすぎる場合はダメらしい。 というわけで、画像が小さすぎるときは縮小しないでそのままUIIma...

UIButtonを動的に作るサンプルコード

ほとんどのアプリで必ず使われるUIButtonですが、swiftでの基本的な使い方を見て行きたいと思います。 let button = UIButton() //表示されるテキスト button.setTitle("Tap Me!", forState: .Normal) //テキストの色 button.setTitleColor(UIColor.blueColor(), forState: .Normal) //タップした状態のテキスト button.setTitle("Tapped!", forState: .Highlighted) //タップした状態の色 button.setTitleColor(UIColor.redColor(), forState: .Highlighted) //サイズ button.frame =...

Objective-C のコンテナ操作

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Collections/Collections.html 主なコンテナクラス NSArray, NSMutableArray : 配列。順序維持。インデックス参照可能。 NSSet, NSMutableSet : 集合。順序不定。重複が無い。 NSDictionary, NSMutableDictionary : 連想配列。順序不定。キー参照可能。 NSHashTable : 集合。弱参照モードがある。 NSMapTable : 連想配列。弱参照モードがある。 弱参照モードについてはObjective-C の弱参照コンテナを参照。...

clang: error: linker command failed with exit code 1 が出たときの体験談

経緯 iOS向けアプリを作ろうと思い立つ せっかくなのでiOS7向けアプリ開発にしようと考える RailsとiPhoneではじめるアプリケーション開発の初版第一刷187ページから写経を始める ライブラリ管理にはCocoaPodsがよいと書いてあるので素直に使いだす ライブラリをpod installする 写経を続ける 201ページまでコードを写したところでRunしたところビルド失敗。 clang: error: linker command failed with exit code 1 なるエラーが発生。 なお Xcode 5.0.1 を使用。 参考 clang: error:...

Xcodeで証明書エラーが起きた時の対処法

1.状況 開発したアプリをtest flightを使って社内のメンバーに配信するために、product>archiveしようとしたら以下のエラーが発生。 2.想定される原因 そもそも証明書がおかしい? code signingで指定しているものが違う。 Xcode > Preferences > Accountsで、使うApple IDを選択した時に本来表示されているべきDeveloper Teamが表示されていない。 3.やったこと iTunes connectからダウンロードした証明書ではなく、以前作成した証明書をキーチェーンアクセスにインストール...

ブロックの中では continue ステートメントは使えない.

for in 文の中でcontinue文を使うことはできますが、 blockで囲ってしまうとビルドエラーになります。 for (NSNumber *num in @[@1,@2,@3,@4]) { continue; dispatch_async(dispatch_get_main_queue(),^{ continue; // これが原因でビルドエラー (continue statement not in loop statement) }); }

iOS 7.0.3からナビゲーションバーにtintColorを指定すると半透明じゃなくなった

iOS7からのUINavigationBarの自動半透明がiOS7.0.3からオフになっているようです。 追記: iOS7.0.4にしてみましたが半透明じゃないままですね。 Facebookアプリで違いを見る Facebookアプリ(v6.6)のスクリーンショットで比較してみるとこんな感じ。 上がiOS7.0.2(iPhone5s)で、 下がiOS7.0.3(iPhone5)です。 いろいろ調べてみると、標準の写真アプリなどの白背景のナビゲーションバーは半透明になっていて、FacebookやInstagramなどのアプリは半透明がオフになっています。 自分でコー...

iOSの5と7ではうまくいくのにiOS6でだけNSDateFormatterで取得できる年がおかしい

2013年って指定しても2012となってしまう。 ↓ YYYY → yyyy で解決(´・ω・`) NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - [formatter setDateFormat:@"YYYY-MM-dd"]; + [formatter setDateFormat:@"yyyy-MM-dd"]; NSDate *selectedDate = [formatter dateFromString:[NSString stringWithFormat:@"%4d-%02d-%02d", 2013, 11, 15]]; NSLog(@"%@", [selectedDate description]); 参考 NSDateFormatter show wrong year

NavigationBarの色を統一したい

appearanceで指定 NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, nil]; [[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; iOS - Globally change navigation bar title color using appearance?

iOS6で.removeAttr('style')が効かない原因と、その対処法

症状 jQuery2.0.xでHTML要素にstyleを当ててから.removeAttr('style')を実行しても、iOS6ではstyleプロパティが削除されません。 jQuery1.9.xでは症状が出ず、jQuery2.0.2, 2.0.3で症状を確認しています。 参考URL http://jsfiddle.net/kzhrk/PGX9k/ 再現 $body.css({ 'background-color' : '#cc0000', 'color' : 'red' }); $body.removeAttr('style'); //$bodyのstyleプロパティが削除されない .removeAttr('class')ではclassプロパティが削除されるのを確認し...

UIViewControllerのカテゴリを作って、UIAppearanceの処理を実行する

Special Considerations initialize it is invoked only once per class. If you want to perform independent initialization for the class and for categories of the class, you should implement load methods. initializeは、クラスごとに一回のみ実行される loadは、そのクラスに、カテゴリもあったとき、別々に初期化を行える ここまでわかれば、UIViewControllerのカテゴリを作りloadメソッドでappearanceの処理を実行するように実装します。 UIViewController+MyApp.m #impo...

iOS7でUDID取得アプリ使ってUDIDを取ると頭にFFFFFFFFがついた無効なUDIDになる

先日、テスト用のアプリを配布するときにUDIDを頂いたとき、UDIDがFFFFFFFF〜から始まっていました。 桁数は40ケタだったのですが、通常なら英字は小文字なのに全部大文字だったし、頭にFFFFFFFFってどう考えてもおかしいと思って調べてみたら、案の定無効なUDIDだったよう。 Unusable UDID in new ios7 (with FFFFFFFF prefix) - Stack Overflow Yes. The "FFFFFFFF" UDIDs are wrong. This seems due to the fact that the UDID is now considered a Privacy Topic and thus Apps ar...

UIPrgogressViewのアニメーションスピード

全部進みきるまでに1[sec] progressView.progress = 0.0; [progressView setProgress:1.0 animated:YES]; としたとき、アニメーションが完了するまでの時間は 1.0[sec] 調べ方 UIProgressViewをサブクラスした上で layoutSubViewsをオーバーライド @implementation CustomProgressView - (void)layoutSubviews { [super layoutSubviews]; UIView *v = self.subviews[1]; for (NSString *key in v.layer.animationKeys) { CAAnimation *a = [v.layer animationForK...

JenkinsでiOS Enterprise配布用のビルドを作成しても実機にInstallするときに失敗してハマった話

状況 JenkinsでEnterprise配布をしようとしていたのですが、iOS実機にDowlonadしてInstallする直前に「失敗しました」みたいなメッセージが表示されてハマっていました。 ただ、全く同じDIRでXCodeでArchiveすると成功します。 何がいけないんだ!と1日くらいハマってました。 ログを見てみると 実機のログを眺めていると「署名のVerificationに失敗した」というようなメッセージが出ています。 Jenkinsログを見ると以下の部分が怪しそうです。 jenkins_log ### Checking original app...

iOS7移行ガイドの公式日本語訳が面白い

Apple公式の日本語訳がかなりひどいので面白い。訳した人がテクニカルタームと気付かず想像で書いてしまっている。 他にもあるだろうから見つけ次第追記していきたい。 iOS7から追加されたViewControllerのプロパティの説明がひどい 外観および動作の項目でUIViewControllerのautomaticallyAdjustsScrollViewInsetsプロパティの説明が面白い automaticallyAdjustsScrollViewInsets スクロールビューの装飾(立体的にくぼんだような表示)は自動調整されますが、これが望ましくない場合...

NSArrayでfor(; ;)とかfor-inを使うのをやめて、enumerateObjectsUsingBlock:を使う

配列から特定のデータを取り出す時や、いじるときに以下のようにループを回す場面は多々あります。 example1 for (int i = 0; i < array.count; i++) { ; } example2 for (id object in array) { ; } example1ではループの際に毎回array.countが呼び出されて無駄だし、条件式などあるのでバグも生みやすい。 example2ではexample1のiに相当する配列のインデックスを求めるためには、変数を別途作ってインクリメントする必要があり面倒です。 そんな話をしていたところ、友...

NSUserDefaultsのwrapperを書くのが面倒になったとき

背景 NSUserDefaultsを直接使用するとkeyがわからなくなったり、typoでバグったりといろいろ大変です。そのためgetter/setterのmethodを定義することで補完を効かせたりdefaultの値を設定できるようにすることがあるかと思います。 iOS - NSUserDefaultsを使うときはWrapして使うと便利 - Qiita しかし、毎回以下の様な感じで値ごとにgetter/setterを記述するのは大変です。 + (NSString *)hoge { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [us...