酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発-iOS

iOSアプリにFirebase.RemoteConfigを導入する

本記事ではiOSアプリにFirebase.RemoteConfigを導入した際にしたことを紹介します。メモなのでそのまま運用できないかもしれません。 たとえば、ユーザーにアップデートを促す際にアラートを表示させます。 アラートの表示条件としては、ウェブに置いている…

iOSアプリにFirebaseを導入する

Firebaseにはいくつかのサービスがあって、それぞれがライブラリの形でCocoaPodsに提供されています。CocoaPods経由でインストールすることができるのでPodfileに1行追記するだけで済みます。 Firebaseを導入する 「Firebase」でログインして、プロジェクト…

Swift 3.0対応は大変だった

Xcode 6.3か6.4の時代に作ったiOSアプリがあってメンテしているんですけれど、iOS 7.xに対応する必要がありCocoaPodsも0.39*1環境でしか使えず、Podfileのuse_frameworks!も使えませんでした。 最近、deploy targetの見直しがあってようやくiOS 7.xを外すこ…

Xcode 8のiOS 10シミュレータを使っているとFacebook SDKの認証に失敗する

Firebase.Authを使ってFacebookログインの実装をしていたのですが、iOS 10でFacebook SDKの認証が通らなくなってしまって焦りました。 (追記)この現象はXcode 8のシミュレータ限定の現象のようです。stackoverflowでも同じ問題に悩んでいる方がいました。 エ…

SVGKitをアップデートしたらLOG_LEVEL_VERBOSEの定義がなくてビルドができない

ikatomoは数多くのサードパーティー製のライブラリを使用しています。 ikatomoをSwift 3.0へアップデートさせようと考えました。しかし、ライブラリの多くはSwift 3.0対応中で現時点での移行は難しそうです。 となればikatomoの更新作業は放置でも良いのです…

Swift3.0でRealmSwiftのビルドが通らない

Xcode 8とiOS 10が正式に公開されました。Swift 2からSwift 3への移植は結構大変という前評判だったので、ボチボチ手をつけていくかぁ……とSwift 3対応を始めたもののすぐに詰まってしまいました。 最近作っているikatomoもPokétomoも、両方ともデータを保存…

SwiftでRGBからHSVへ変換する

RGBの値をHSVの値に変換するためのコードを書きました。大昔にC#で書いた処理をSwiftに移植しました。 説明は上記の記事をご覧ください。以下、HSVクラスです。 class HSV { //色相 var hue: Double = 0 //彩度 var saturation: Double = 0 //明度 var value…

iPhone 4sだとCIDetectorが使えない

iPhone 4sだとCIDetectorが使えません。APIとしては存在しているのですが、detector.featuresInImage(img)で常にnilが返されます。 少し悩んだのですが、フォーラムに同じ問題で悩んでいる方がいました。 CIDetector doesn’t work for QR-code detection o..…

Swiftでタブバーにバッジを点灯させる/タブバーの部分に任意のUIViewを表示させる

iOSアプリでタブバーにバッヂを点灯させてみましょう。また消灯させる方法についても紹介します。 標準のバッヂはモサっとしていて嫌だと思う方もいるかもしれません。カスタマイズさせることを厭わない方向けに、タブバーの部分に任意のUIViewを表示させる…

Xcode 7でビルドしたアプリをApplication Loaderを使って申請するとInvalid Swift Supportが発生する

Jenkinsからxcodebuildを使ってipaファイルを生成します。Application Loaderを使ってipaファイルをアップロードするとInvalid Swift Supportが発生したとメールが送られてきます。 Appleから送られてくるメール Application Loaderを使ってアップロードする…

iOS 9でHeiti TC/SCが使えなくなっている

すこし前にHeiti SCを指定しているはずなのに意図通りフォントが表示されていないことがありました。調べてみたらiOS 9ではHeiti TC/SCが使えなくなっていることがわかりました。 フォント名 Heiti TC STHeitiTC-Light STHeitiTC-Medium Heiti SC STHeitiSC-…

Realm Swiftを使って複数の条件でソート(並べ替え)する

本記事ではRealm Swiftを使って複数条件でソートする方法を紹介します。使用しているRealm Swiftのバージョンは0.97.0です。 Realm Swiftを使って複数の条件でソート(並べ替え)する Realm Javaでの複数条件のソートしたい場合、「Realm Javaを使って複数の条…

SwiftでToday Extensionのデバイスの向きを判定する

少し前のエントリ「SwiftでToday Extensionの高さをUITableViewの高さに合わせる」で、Widgetの高さの上限値は「アプリ名のセクションを含めてWidgetが1画面で収まる高さ」と書いておきながら、デバイスを横にした時の処理を忘れていました。 下図は、現在開…

Mac OSXでAppiumを使ってiOSシミュレータを起動する

インストール brewのインストール rubyのインストール nodebrewのインストール appiumのインストール rspecのインストール bundleのインストール 1.と2.はCocoaPodsを使うためにインストールされていると思います。 テストを実行してiOSシミュレータを起動す…

SwiftでSDWebImageを使ってダンロードした画像を加工してUIImageViewに表示する

iOSでネットワーク上のリソースをUIImageViewに表示するライブラリに「SDWebImage」というものがあります。導入方法については以下の記事で紹介しました。 SDWebImageを使ってUIImageViewに画像を表示させるには下記のように書くことができます。 // import …

SwiftでUIColorの色を一段階暗くする

// 一段階暗くする var color: UIColor = UIColor.redColor() var hue : CGFloat = 0 var saturation : CGFloat = 0 var brightness : CGFloat = 0 var alpha : CGFloat = 0 if color.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha…

SwiftでもSDWebImageを導入する

SDWebImageは画像をダウンロードとダウンロードした画像のキャッシュをおこなってくれます。細かな設定があり、キャッシュ総容量であったり有効期限を指定して使うことができます。 導入にはいつもどおりCocoaPodsを使います。Podfileに下記のように記述しま…

iOSアプリ開発の記事一覧

iOSアプリケーションの開発Tipsを紹介しています。 目次 目次 導入 基本的なプログラミング 文字列操作 リフレクション View 拡張機能・エクステンション マルチメディア 画像処理 カメラ ネットワーク SDWebImage デバイス/センサー システム マルチスレッ…

SwiftでNSAttributedStringを使って文字列を装飾する(UILabelに画像を表示する)

直近でやっていたプロジェクトでNSAttributedStringに関する知識が少なくて苦労したので忘れないようにメモしておきます。 NSAttributedStringに関してはすでに色んなブログやサイトで紹介されているのでご存知の方も多いかもしれませんが文字列を装飾してく…

Swiftでシングルタップとダブルタップとロングプレス(ホールド)に同時に対応する

iOS 3.2からUIGestureRecognizerが追加されてからよく使っていたのですが、シングルタップとダブルタップ、ホールド(ロングプレス)に同時に対応します。 シングルタップとダブルタップはUITapGestureRecognizerクラスで対応することができます。ホールド(長…

AppStoreで公開中のiPhoneアプリを取り下げる(非公開にする)方法

本記事ではAppStoreで公開しているiPhoneアプリを取り下げる方法を紹介します。 AppStoreで公開中のiPhoneアプリを取り下げる 以下の作業は2015年4月1日時点でのiTunes Connectの日本語版UIを元にしています。 iTunes Connectにログインして「マイApp」をク…

Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成してiTunes Connect(Testflight)に投げる方法

2014年にAppleがTestflightを買収してから数年経ちました。Androidのサポートが打ち切られたりして対応に追われたこともありましたが、数年経ち公式にiTunes Connectのアプリ申請プロセスに組み込まれるようになりました。 iOS 8を公開した時期から1つのバー…

iOSでマスク画像を使ってマスク処理した新しいUIImageを作る

UIImage *srcImage = [UIImage imageNamed:@"test_image"]; UIImage *dstImage = nil; UIImage *maskImage = [UIImage imageNamed:@"mask_image"]; CGImageRef m = maskImage.CGImage; CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(m), CGImageGetH…

9月30日に終了してしまうAdWhirlの応急処置をおこなう (iOS編)

まず最初にAdWhirlの紹介から。 iOS/Android向けのアドネットワーク(スマートフォンの広告提供元)は沢山あります。スマートフォン関連で最も賑やかな分野のひとつで、日々あるところが潰れて、またあるところが登場してきて、アドネットワーク自体の増減があ…

iOSでZBarSDKを使ってバーコードの読み込みをおこなう

すまべん・Androidの会勉強会の時に、モノタッチの中の人がバーコードを読み取る為にこんなライブラリを使っています・・・と、ZBarSDKを使われているのを知って、ぜひうちでも使ってみようと言う事になりました。ZBarSDKは、カメラプレビューからバーコード…

autoreleaseと僕とメモリ不足

Obj-Cにおけるオブジェクトの扱いは、allocだったり、retainだったり、autoreleaseだったりとややこしいですね。 NSAutoreleasePoolのリファレンスによると、メインスレッドでイベントループの最初にNSAutoreleasePoolが作られ、イベントループの最後にrelea…