まいまいワークス

主にiPhoneアプリの開発で考えた事、調べた事、感じた事などを記していきます。

【swift】変数のオプショナル型

swiftの変数は基本的にnilを許容しません。 しかしながら、textFieldやAPI経由で外部から値を取得する場合など、構造上、値がnilになりうる場合があります。 そこで利用されるのがオプショナル型の変数です。 変数をラップする(オプショナル型を使う)をnilを…

【swift】インスタンス変数、クラス変数、ローカル変数

//すべてのクラスから参照可能 let global_let = "global" //グローバル変数 class myClass: NSObject { public let aaa = "abc" //インスタンス変数(クラス内の共通変数)、インスタンス化すると他クラスから参照可能 let bbb = "def" //インスタンス変数(ク…

【swift】変数を利用する

/** 定数の定義 */ //letで宣言した値は後から変えられない let aaa = "abc" //型を宣言しなくても型推論でStringと認識 let bbb:String = "xyz" //String型を明示 /** 変数の宣言 */ var ccc = 123 //型を宣言しなくても型推論でIntと認識 var ddd:Int = 78…

端末のpush通知設定情報をアプリ側で取得する

メモ UIUserNotificationSettings* userConfig = [[UIApplication sharedApplication] currentUserNotificationSettings]; NSLog(@"cfg=%lu",(unsigned long)userConfig.types); /** 7:通知、バッジ、サウンドOK 6:通知、サウンドOK、バッジNG 5:通知、バッ…

SDWebImageでアニメーションgifとWebPを表示させる

SDWebImageはなかなか優秀な子で、JPEGやPNG以外にもGIF、WebP形式の画像も表示できるんですね! アニメーションGIFを使えば表現の範囲が広がるし、WebPを使うと画像の容量が小さくなるので、サーバーや通信帯域などのインフラ資源を有効に使うことができま…

iOS/objective-Cのマクロ設定のまとめ

必要に応じてdefine.hにマクロを追記していき、次のプロジェクトではそのままマクロファイルを受け継ぐようにしていると、だんだんマクロ設定が増えてきたので一旦まとめてみようかと思います。 画面サイズ //スクリーンの高さ #define SCREEN_HEIGHT ([UISc…

ffmpegのメモ(自分用)

フォーマット変更、サイズ変更、切り取り(時間軸)、切り抜き(xy)など ffmpeg -ss 0 -t 6 -i 1420114405.mov -s 320*568 out.mp4 ffmpeg -ss 0 -t 6 -i 1420114405.mov -vf crop=200:300:25:25 out.mp4 -ss:スタート時間 -t:動画の時間 -i:入力ファイル -s:出…

カードをくるっと回転させる処理

アプリの中のちょっとした見せ方でビューをモーダビューのUIModalTransitionStyleFlipHorizontal のようにくるっと回転させるやり方です。 coreAnimationとか使わなきゃダメなのかなーって思っていたのですが、 alpha値の処理でUIViewのアニメーションでそれ…

push通知の証明書をp12からpemに変換するコマンド

push通知の証明書ファイル作成は1つのアプリで1回しかやらない作業だから毎回忘れてしまいます。 キーチェーンアクセスからp12形式で書き出すところはいろいろなブログなどでも書かれているので割愛するとして、pemファイルへの変換(p12を食わせればいいシス…

viewController単位での回転制御

普段、縦画面固定のアプリを作る事が多いので、縦横対応などが出てくると見事にハマってしまいました。 原因と解決方法などのメモ。 やりたかった事 基本的には縦画面固定だが、一部の画面で縦横対応にしたい ハマったポイント -(BOOL)shouldAutorotate;でNO…

Apple Store, Omotesando

先週金曜日にAppleStore表参道店とウワサされていた工事物件の 覆いが外され、 「Apple Store, Omotesando もうすぐ」 「ケヤキの樹の下で、ちょっと特別なことが始まります。」 との表示がなされています。 ネットでもこの話題で持ち切りでしたね。 実際、…

UIColorの色指定

UIColorの色指定は標準で十数色の色が定義されていて、以下のように指定ができます。 [UIColor redColor] それ以外の色を指定する場合は [UIColor colorWithRed: green: blue: alpha:] などで指定する必用があります。 これではあまりにも面倒なので、以下の…

タスクスイッチャーで任意の画像を表示する

iOS7からタスクスイッチャーに入っているアプリは、バックグラウンドに遷移した時点の画面がサムネとして表示されていますが、アプリによってはここにあまり表示しない方がよかったり、別の情報を表示できた方がよかったりすることもありますよね。 そんな時…

アプリ申請時のスクショはどこまで手を加えてもいいか問題の結論

アプリ申請時のスクリーンショットは、ユーザーがインストールするか否かを判断する大きな判断材料になります(特に1枚目)。 なので、できるだけいいピクチャをアップしたいですし、できれば装飾なんかも加えて見栄えを良くしたり、よりアピールができるピク…

レビューと言えないような酷い書き込みは削除できるらしい

App Storeに投稿された不快なレビューを削除する方法 一時期、日本のApp Storeの一部のアプリのレビュー欄で誹謗中傷とか、的外れな批判が酷いという話を聞いた事があるのですが、 レビューと言えないような不快な書き込みは消す事もできるようです。 Macか…

ホームスクリーンに表示されるタイトルもASOの対象?

BundleDisplayNameを使ったASO対策がローカライズ対応に凄く使える ASOといえば、 アプリタイトル 説明文 keyword レビュー評価 レビュー文言 などが重要かなと思っていたのですが、タイトル欄に入りきらない文言も検索対象になっているとの事。 個人的には…

プログラムの処理時間を計測する

処理時間計測の簡単な方法としてはNSLogを処理の始めと終わりに出力してその時間差を計算する方法がありますが、もう少し正確な計測をしてみたいと思います。 方法は以下の通り! //これをインポートしておく #import <sys/time.h> //任意のメソッド内の記述 struct time</sys/time.h>…

意外と面倒!タイムラインで見られる1時間前、1日前といった文字列を生成する

関連記事 NSDateの罠 - まいまいワークス サーバーから取得した時間情報を元に、現在の時刻から計算を行い、タイムラインで見られる1時間前、1日前といった文字列を生成します。 サーバーが日本時間を基準に値を返し、iPhoneで設定された時間帯がアメリカだ…

Xcodeユニットテスト事始め

自作クラスに対して、修正が入るたびに手動でテストを行うのはあまりにも非効率なのでユニットテストの調査を行いました。 本エントリはその初歩の初歩。 テスト対象のクラスを作成 ここではテスト用の簡単なクラスを定義します。 #import <Foundation/Foundation.h> @interface MyCla</foundation/foundation.h>…

アラートにテキストフィールドを追加する

ちょっとしたテキスト情報の入力とか、ID/Passの入力などわざわざviewをつくるよりアラートでできた方が便利ですね。 今回はそのやり方。 UIAlertView* alert = [UIAlertView new]; alert.title = @"タイトル"; alert.message = @"メッセージ"; alert.delega…

CocoaPodsでライブラリのライセンスの表記を自動生成してみた

オープンソースのライブラリの中には使用している旨を明記しなければいけないものがあったりするのですが、これがなかなかめんどくさいのです。 しかしながらCocoaPods自動生成のフローを一度作ってしまえば後はファイルのコピペと少しの書き換え程度で使い…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#8]〜Facebookのフィード投稿〜

メッセージの投稿 これが投稿の基本パターンになります。 //例によって以下の項目をインポートする #import <Parse/Parse.h> #import <FacebookSDK/FacebookSDK.h> #import <AFNetworking/AFNetworking.h> -(void)fbpost:(NSString *)message{ //プライバシー(公開範囲)の設定 NSDictionary* privacy = @{@"value":@"CUSTOM", @"frien</afnetworking/afnetworking.h></facebooksdk/facebooksdk.h></parse/parse.h>…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#7]〜Facebookアカウントでの認証〜

基本的な設定 ここはすでに前回のTwitterアカウントでの認証で行っているので省略 Facebook認証 -(void)facebook{ // パーミッション // タイムラインにユーザーに代わって書き込むにはpublish_streamが必要 NSArray *permissionsArray = @[ @"user_about_me…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#6]〜Twitterのタイムライン投稿〜

メッセージのみを投稿 //以下の項目をインポートしておく #import <Parse/Parse.h> #import <FacebookSDK/FacebookSDK.h> #import <AFNetworking/AFNetworking.h> //twitter 文章のみ投稿 -(void)tweet:(NSString *)message { //URLとパラメータを生成 NSString* url = @"https://api.twitter.com/1.1/statuses/update.json"; NSMutab</afnetworking/afnetworking.h></facebooksdk/facebooksdk.h></parse/parse.h>…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#5]〜Twitterアカウントでの認証〜

基本的な設定 //ParseとFacebookのSDKをimport #import <Parse/Parse.h> #import <FacebookSDK/FacebookSDK.h> //アプリ起動時の設定 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //Parse初期設定 [Parse setApplicationId:@"Pars</facebooksdk/facebooksdk.h></parse/parse.h>…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#4]〜Parseの登録と設定〜

Parseは最近話題のmBaaSのひとつで、プッシュ通知、ユーザー管理機能、データストアなどのサーバー側の機能を提供してくれます。 ここではユーザー管理機能のみを使いTwitterとFacebookアカウントによる認証を行います。 登録 ParseのURLはこちら アクセスし…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#3]〜Facebookのアプリ登録〜

登録 Facebookの開発者ページに入り、右上の+Create New Appをクリック Display Name,Namespace(optional)を入力し、カテゴリを選択します。 設定 次に各種設定を行います。 アプリケーションIDとアプリのシークレットキーをメモっておきます。 連絡先メール…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#2]〜Twitterのアプリ登録〜

登録 Twitterの開発者ページに入り右上のSigninからサインインします。 サインイン後、右上のボタンからMy Applicationsを選択します。 Create New AppからName, Description, Website, CallbackURLを設定します。 Name,Websiteは認証画面の表示に反映、Call…

Twitter/Facebookのアカウントで認証して、アプリからタイムライン/フィードに投稿する[#1]

アプリの機能としてはポピュラーなもので、需要はあるはずなのになぜか日本語の解説記事やブログネタとしては、ほとんど目につかないこの課題。 実装する機会があったのでいろいろ調べて、なんとかログインから投稿までたどり着けたので手順をここに記してい…

NSDateの罠

自社サービスでも複数のサービスで数回NSDateの罠にはまっているので、あらためて要点をまとめたいと思います。 NSDateが登場する場面 ・端末から現在の時刻を取得 ・UIDatePickerから任意の時刻を取得 ・サーバーからyyyy-MM-dd HH:mm:ssなどの形式で取得 …

メンテナンスを考慮した設計

iOS アプリのメンテナンス性を高めるための基本的な考え方 from kakegawa-atsushi 設計時は画面単位ではなく、機能単位で考えればいい設計が出来るかな。 そのためには開発着手以降は仕様を変えないでほしいですね。 って言っても、そんな事は現実的ではない…

Xcodeを使い倒して効率化

タイトル若干釣り気味ですw objective-Cの構文って長いものが多かったり、普段よく使うものでもプロパティの種類がたくさんあったりで、完全に覚えているものはほとんどありません。 で、これまでどうやってきたかと言うと、過去のソースからコピペしたり、e…

UITableView・UICollectionView攻略

iOSアプリの要となるtableviewとcollectionviewですが、設計の要点をおさえておかないとちょっとした事でスクロール時のパフォーマンスが落ちてしまい、アプリそのものの完成度の印象も格段に落ちてしまいます。 特にcollectionviewは1行に複数のアイテムが…

UICollectionViewCellをプログラム側から選択状態にする

[self.collectionview reloadData]; 上記の命令でUICollectionViewをリロードした場合、 すでに選択されていたセルの選択状態が解除されてしまいます。 そこで、あらかじめ選択・未選択の属性を配列などに保存しておき、 -(UICollectionViewCell*)collection…

アプリ企画の打ち合わせをしていて、ふと感じた事

情報設計やUIの仕様決めをする際、 いろいろな人からいろいろな意見が出てきて話がまとまらない事がよくあるのですが (なので、あまり大人数ではやりたくない) 自分の意見を推すために、他社の既存アプリを引き合いに出して正当性を主張する人がいます。 引…

ペーパープロトタイピング用のステンシルを入手しました

UI Stencilsで購入しました。 ステンレス製のステンシルシートと専用の用紙。 用紙の方は、ポストイット的な裏面にのりが付いてるタイプと ノート型の3連タイプを入手しました 実寸の140%のサイズなので、ほかのペーパープロトタイピング用紙には使えないと…

アプリ実行中にステータスバーのサイズが変更された際の対処

通話中やテザリング中などはステータスバーのサイズが変更されるので ビューの表示の際には [[UIScreen mainScreen] applicationFrame].size.height を使ってアプリケーションエリアのサイズを取得し、これを基準にビューの表示を行いましょう!と言うおはな…

iPhoneとiPadの判別

端末の判別に[[UIDevice currentDevice].modelを使用する事がありますが、このやり方だとiPhone, iPad, iPodTouch, iPhone Simulator, iPad Simulatorの値が返ってくるため、単純にユニバーサルアプリ等でiPhone, ipadの判別をしたい場合は処理が煩雑になっ…

モーダルビューの背後のナビゲーションコントローラー, タブバーコントローラーを操作する

モーダルビューを閉じる際に背後のナビゲーションコントローラーやタブバーコントローラーを操作する場合、 親ビューに通知を飛ばして画面遷移、タブ切換えの操作をしてもいいのですが、記述が分散したり、モーダルが複数のビューから呼ばれる可能性がある場…

google Analytics3の基本的な設定方法

iPhoneアプリ申請直前にgoogle Analyticsを確認してみたら、早くもver.3が出ていたので設置してみました。 SDKのダウンロードはこちら基本的にはここの情報に従って設定を行います。 下準備 コピーするファイルは以下の通り GAI.h GAITracker.h GAITrackedVi…

Xcode5 iOSシミュレーターのフォントの件

薄々気づいていたのですが、特に実害もなかったのでスルーしていました。iOSシミュレーターのフォントが何か違う。微妙にダサい。 しかしながら、シミュレーターでスクショを撮る必要性に迫られようやく重い腰を持ち上げて調査する事になりました。 こちらは…

iOS7のステータスバーの電池アイコンの色

iOS7になってステータスバー周りの仕様が一部変更され、バッテリー表示も緑色のアイコンになりました。 ところが、ふとした瞬間にバッテリーのアイコンを見ると、アプリによっては白黒表示されている モノもある事に気付きました。 ステータスバーの色によっ…

konashiが届きました(開封編)

konashi取扱説明書から抜粋 konashi(YE-WPC001)はスマートフォンやタブレットの新しいインタフェースを考えるアーティスト、デザイナ、エンジニアのためのフィジカル・コンピューティング・ツールキットです。 というわけで、BluetoothLEを使って通信しアナ…

FMDBで軽くハマったのでメモ

データベース系で不具合が起こり、とりあえずFMDBを最新版に入れ替えてみたのですが、その事がさらなる事態を引き起こしてビルドエラーになってしまいました。 FMDBをダウンロードしてsrcフォルダを丸ごとプロジェクトにコピーしてしまったのですが、よく考…

Xcode4.xで作成したプロジェクトファイルでAsset Catalogを使う

Xcode5からはプロジェクトを作成すると自動でAsset Catalogが作成されますが、Xcode4.xで作成したプロジェクトをXcode5で開いてもAsset Catalogはありません。やり方は簡単なのですが、いろいろ遠回りをしてしまったので、やり方を記しておきます。 TARGETS→…

はてなブログでSyntaxHighlighterを使ってobjective-Cを表示する

はてなブログには元々syntaxHighlight機能があるようですが、SyntaxHighlighterを使いたい!という事でいろいろ調べてみました。 必要なもの ・SyntaxHighlighter - Download とりあえずこれがなくちゃ始まりません。 ・objective-C用brushファイル ここから…