android & ios

「Google Maps」がインストールされているか確認する

インストール確認 iOS6の標準マップアプリではなく、「Google Maps」アプリで連携したい場合、 Google Mapsで定義されているURL Schemeによりインストールされているか確認する if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) { /* インストールされている */ }else{ /* インストールされていない */ } インストール済みの場合は、パラメータ指定してMapオープン。 Google Maps URL Scheme - Google Maps SDK for iOS — G...

NSDictionaryから直接CoreDataへ保存したい

WebAPIで取得してきたデータは一旦NSDictionary型で取り扱うかと思います。 こいつをそのままCoreDataに保存できたら便利ですよね。 例として以下の様なフォーマットでAPIのレスポンスが返ってくる場合 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>notification</key>...

convertRect:toView:系メソッドについて。

iOSではViewの位置を、親のViewの原点からの相対位置で指定し、保持する仕組みになっています。 そのメリットは2点あります。 1.画面の向きを考慮する必要がない 2.親の位置を考慮する必要がない iPhoneのような画面の向きの自由度の高いモバイル端末では、ユーザーから見た左上の原点座標(0,0)が、物理デバイスの原点座標(0,0)と一致することを保証できません。親の左上原点を(0,0)とした相対座標の仕組みは、この複雑さを隠蔽しています。 またViewが複雑に入れ子状になっているレイ...

StoryBoardを利用した制御関連コード

遷移開始 [self performSegueWithIdentifier:@"openCameraFinder" sender:self]; モーダルビューから、親ビューへ戻る [self dismissViewControllerAnimated:YES completion:nil]; StoryBoard 遷移前に遷移先のコントローラに値を渡すとき prepareForSegue:senderは、api裏側でControllerオブジェクトのメモリが確保された後、viewDidLoadが呼ばれる前に呼び出される。 - (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender { // segue のidentifier で、どの画...

TAKABO SOFT流 Objective-C ソースの書き方

概要 ここ1年ぐらいiPad向けのアプリを作っていたのですが、その際にXcodeを使ってObjective-Cのソースをそれなりに奇麗に見えるように自分なりにあれこれ試行錯誤してきました。その結果を整理して晒してみたいと思います。 なお、Appleが「Cocoa向けコーディングガイドライン」という物を出していますので、基本的な部分はそちらが参考になると思います。 https://developer.apple.com/jp/devcenter/ios/library/japanese.html (GoogleもObjective-Cのスタイルガイドを出していま...

UILabelを角丸にする&パディングを設定する方法

角丸にする LibraryにQuatzCore.frameworkを足す #import <QuartzCore/QuartzCore.h> - (void) hoge { [[label layer] setCornerRadius:5.0]; [label setClipsToBounds:YES]; } パディングを設定する 参考 UILabelにパディング設定 サブクラスを作った方が良いそうです。 MyUILabel.m - (void)drawTextInRect:(CGRect)rect { // top, left, bottom, right UIEdgeInsets insets = {0, 20, 0, 20}; return [super drawTextInRect:UIEdgeInsetsInsetRect(rect,...

RailsとiPhoneではじめるアプリケーション開発をiOS7向けに読み進めるときの注意・修正点

RailsとiPhoneではじめるアプリケーション開発の初版第一刷187ページから写経を始めた。 しかし、この本、誤植・タイポが非常に多い。なので、修正しながら読み進めていく。 みんなで正誤表 http://public-errata.appspot.com/errata/book/9784844334477/ にも誤記・誤植の情報がある。 8 206ページ 〜〜Controllerの6つのクラスを作る。「まず、〜〜作成します」と記述されているがこれから作成するのか、このページでもう作成してしまうのか不明瞭。ここで作るのが正解。 グループ名...

Parseを触ってみた(iOS-1) - ユーザ管理 -

MBaaSの有名どころであるParseを触ってみた。 色々と出来るのだけども、今回はその中からユーザ管理(の一部)についてまとめてみた。 MBaaSってなに? スマートフォンアプリの開発に必要な汎用的機能をAPI、SDKで提供しサーバー側のコードを書くことなく、サーバー連携するスマートフォンアプリを効率よく開発出来るようにするクラウドサービス http://mb.cloud.nifty.com/about.htm Parseってなに? 2013年にFacebookに買収されたことでも有名になったサービス。 2014年12月には技術ド...

Swift 謎 (1)

swift var myString :String? = "a" println(myString ? "OK" : "NG") はOKで、 swift var i = 1 println(i ? "OK" : "NG") がNGなのが解せない。ドキュメントちゃんと読もう。

Inspect the view hierarchy

This is the undocumented API. NSLog(@"%@", [view performSelector:@selector(recursiveDescription)]);

Reverse Array

NSArray *someArray = [NSArray arrayWithObjects:@"Python", @"Objective-C", @"JavaScript", @"Erlang", nil]; NSArray *reveresedArray = [[someArray reverseObjectEnumerator] allObjects]; NSMutableArray *mArray = [NSMutableArray arrayWithArray:reveresedArray];

iPhoneでプロキシサーバーの例外設定をする

結論から言ってしまうと出来ません。 そこで.pacファイルを使用します。 .pacファイルはProxy auto-configと言ってプロキシ設定を自動で行うための設定ファイルです。 下記のような.pacファイルを作成し、アクセスできる場所へ配置します。 ※もちろんプロキシ設定前なのでプロキシを経由せずにアクセス出来る場所である必要があります。 function FindProxyForURL(url, host) { //Access images directly if (host == "image.xxxxxx.co.jp") return "DIRECT"; if (host == "thum...

iOS7対策にとりあえず見ておいたらよさそうなリンク一覧

ios7のデモビデオとギャラリー http://www.apple.com/ios/ios7/ まずは衝撃をうけるために。 既存アプリとかで存在価値が無くなりそうなのがありそう... iosデザインリソース https://developer.apple.com/library/prerelease/ios/design/index.html UI移行ガイド ヒューマンインターフェースガイドライン UIKitユーザーインターフェースカタログ へのリンクがある。 下の2つは長いので、移行ガイドだけ読めばとりあえず良さそう。 ios7 UI移行ガイド https://developer.apple.com/lib...

iOS8系ではperformance.now()が使えない

iOS9系からは使えるようになっていますが、iOS8系ではperformance.now()が使えないので注意が必要です。 ちなみに、requestAnimationFrameの第一引数にてperformance.now()と同等の値を受け取ることができ、 こちらは問題なく動くようです。

GMGridView 等でスクロールインジケータがビューに潜ってしまう場合の対処法

※バッドノウハウ。 UICollectionView が使えない iOS 5系以前で重宝している GMGridView だが、スクロールインジケータがセルの裏に潜ってしまうというバグ(?)がある。 事例 ビューの再利用機構を備えたスクロールビューを独自に作った場合にこのような現象を見かける事がある。 手っ取り早い対処法として、スクロールビューのサブビュー配列からスクロールインジケータ(UIImageView)を見つけ出してそいつに bringSubviewToFront: をしてやるという方法がある。 GMGridView の場...

iOSアプリでwavからflacへの変換を行う

はじめに iOSでは標準でflacファイルをサポートしていません。 外部ライブラリを用いて、wavからflacへ変換する手順をまとめたので共有します。 環境はXcode7.1、iOS9、Objective-cです。 FLACとは ライブラリ取得 ライブラリを2つダウンロードします。 IDZPrecompiledFLAC IDZPrecompiledOgg arm64対応でビルドしてあって非常にありがたい! プロジェクトに追加 以下2点に注意。 ・Link Binary With Librariesから追加 Build Phasesから追加します。 ・bitcodeサポートをNOに変更 Bui...

Background App Refreshについて

iOS7からアプリのバックグラウンド実行可否をユーザが設定、選択できるようになった。つまり、お行儀の悪いアプリはユーザの意思でバックグラウンド実行を止められるということ。なお、 バックグラウンド実行 と書いているが、Appleの日本語表記では Appのバックグラウンド更新 が正しいらしい。 設定状態はUIApplicationのbackgroundRefreshStatusプロパティから取得できる。このプロパティは UIBackgroundRefreshStatus の値を持ち、次の3項目がある。 UIBackgroundRefreshStatusAva...

Storyboardに移行するサンプル - 導入編

いまどきありえないと思いますが、Storyboardがない状態から導入するための方法を何回かに分けて、書いていこうと思います。簡単なTodoアプリを作りました。このアプリの挙動を変えずにStoryboardを導入したと思います。 https://github.com/akuraru/IntroductionOfStoryboard/compare/1.0...1.1 今回は、タグ1.0から1.1に変換します。 目標 ViewControllerをallocせずに、Storyboardから読み込む Sotryboardから読み込むだけでレイアウト情報は、踏み込まないです。 実装 Main.Storyb...

TableView のセパレータカラーの変更

self.table_view.separatorColor = [UIColor colorWithRed:0.913 green:0.913 blue:0.913 alpha:1.0];

Storyboardに移行するサンプル - 遷移編

Storyboardがない状態から導入するための方法を何回かに分けて、書いていこうと思います。簡単なTodoアプリを作りました。このアプリの挙動を変えずにStoryboardを導入したと思います。 注:絶対に一度に移行しようと思ってはいけません。少し進んだら、動作を確認しコミットしておきましょう。 https://github.com/akuraru/IntroductionOfStoryboard/compare/1.2...1.3 目標 StoryboardからViewContorllerを取り出して遷移をしていた。 Segueを使って遷移をするように切り替えます。...