まいまいワークス

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

正方形の画像からアイコン画像を生成する

要件検討 iOSのアイコンなので単純な角丸形状ではなく、複数のRを用いて直線部分と滑らかに接続された角丸形状にする。 背景と同化する場合があるのでドロップシャドウを軽くかける。 実装方法 単純なRを用いた角丸ではないのでicon.layer.cornerRadiusは使…

アラートダイアログ基本パターン

概要 UIAlertControllerによるダイアログの表示を、汎用クラスを作成し各画面から呼び出せるようにします。 一般的なボタン1つもしくは2つのダイアログを想定。 3つ以上のボタン構成や、テキストフィールド付きのダイアログは使用頻度が低いと考え汎用クラス…

【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…