読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

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

ikatomo for Splatoonができるまでの軌跡

先日「ikatomo for Splatoon」*1をリリースしたことを書きました。 Splatoonにはゲームと連動してオンラインのフレンドや現在遊べるステージを見ることができる「イカリング(SplatNet)」というウェブサービスがあります。 「ikatomo」はイカリングに掲載され…

Ruby 2.3.0にしてCocoaPods 0.39.0を使ったらpod installでエラーが出た

数ヶ月前に開発で使っているMacBook ProをOS X El Capitan(10.11.3)にしたんですが、当初使えていたXcode 6.4がなにかのキッカケで壊れてしまいました。Xcodeを起動した時にツールバー(?)にスキームや実行するiOSシミュレータを選択する部分が表示されないん…

ikatomo for Splatoon v1.0をリリースしました

ようやく「ikatomo for Splatoon」がリリースされました。日本以外でのアプリ名は「SplatFriends for Splatoon」です。今日から2016年2月8日までは120円です。 ikatomo for SplatoonKENJI WADAユーティリティ¥480 基本的な機能は、イカの通りです。 フレンド…

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

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

SwiftでUINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える

UINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える方法としては、UINavigationController#setNavigationBarHiddenメソッドを使います。 // ナビバーの表示を切り替える if let nv = navigationController { let hidden = !nv.navi…

SwiftでSVGKitを使ってSVG画像を表示する

SVGはベクター形式の画像フォーマットのひとつです。SVGを使ったことがなかったので調べたこともないのですが、SVGをUIImageに変換するライブラリはいくつかあるようです。 ここでは、SVGKitを使って画像を表示しました。 導入にはいつもどおりCocoaPodsを使…

Xcode 7.2(iOS 9.2 SDK)を使うとUILabelが崩れたりNSAttributedString#boundingRectWithSizeで意図しない値が返ってくる

時間ができた時にコツコツと Xcode 6.4 + iOS 8.4 SDKを使って開発していたアプリをXcode 7.2でビルドが通るようにしていました。要するにSwift 1.2からSwift 2.1.1への移行です。 ある時、UICollectionViewのフッターの表示が崩れていることに気付きました…

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

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

Jenkinsを使ってToday Extension(Widget)を含むiOSアプリをビルドする

過去にxcodebuildを使ってビルドを自動化する方法を紹介しました。 本記事ではToday Extension(Widget)を含むiOSアプリをJenkinsでビルドする方法を紹介します。アプリ側とToday Extension側とで使用するプロビジョニングプロファイルが異なります。 ビルド…

SwiftでUITextFieldの文字入力を検出する

iOSでは文字入力用のコンポーネントとしてUITextFieldを利用します。文字入力中……1文字入力ごとにバリデーションしたい時があります。たとえば、 ログイン画面でユーザーIDとパスワード欄が両方入力された場合にログインボタンを有効にする ユーザー登録中に…

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…

CocoaPodsを使ってEmbedded Frameworkにライブラリを追加したらiTunes Connectからリジェクトされる

CocoaPodsを使ってEmbedded Frameworkにライブラリを追加したらiTunes Connectからリジェクトされてしまった。 問題は解決していないので寝る前にメモを残しておきたいと思います。解決でき次第、追記するかもしれません。 やりたいこと jsonをダウンロード…

SwiftでもSDWebImageを使う

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

iOSでカスタムフォントを使う

その昔、iOSアプリでカスタムフォントを使うのはそれなりに大変だった気がするのですが、Xcode 7ではInterface Builderからカスタムフォントを直接指定できるようになっていました*1。 本記事では、iOSでカスタムフォントを使う方法を紹介します。具体的には…

iOSアプリ開発の記事一覧

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

【2015/8/31まで】Windows Phoneアプリ開発者は無料でXamarinのライセンスがもらえるよ!

C#でiOSやAndroidのアプリを開発できる「Xamarin」のライセンスを無料で入手できるキャンペーンをやっているようです。 Xamarinの代理店エクセルソフトの田淵さんのブログによると…… 2015/8/17 以前に公開された Windows Phone アプリ個人開発者に無料の Xam…

Objective-Cで書かれたXcodeプロジェクトをWindows 10で動かす「WinObjC」のプレビュー版がでました

Objective-CやJavaで書かれたiOSアプリやAndroidアプリをWindows 10で動かすためのWindows Bridgeプロジェクトがあります。ワシントン州の地名をとったコードネームでそれぞれ「Project Islandwood」「Project Astoria」と呼ばれていました。 https://dev.wi…

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

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

SwiftでGrand Central Dispatch(GCD)を使った並列処理が実行される順番を調べてみた

Grand Central Dispatch(GCD)を使った並列処理が実行される順番を調べました。 やりたいこととしては、別スレッド上で処理してすべての処理が完了したらUIスレッドに終わった通知を送りたい。つまり並列処理の待ち合わせ(並列プログラミングガイド的にいえば…

SwiftでWatchKitアプリのテーブルでセルの背景の角丸をなくす/セルの背景を消す/セルにセパレーター的なものを追加する

Apple Watch*1のWatchKitアプリで実装する際によく聞かれることのひとつとしてはテーブル(WKInterfaceTable)での表現力です。WKInterfaceTableを使っているといかにUITableViewが表現力に優れているのかが分かります。 それはさておき表題のように「テーブル…

JenkinsでCocoaPodsを含んだiOSアプリプロジェクトのビルドで署名に失敗してしまう

(開発的な意味で)チームで働くことはほぼなくて1人でiOSアプリを開発していると、1件1件最新ビルドが欲しいという要望に応えるのが難しかったです。……というか、僕は限界だったのでJenkinsを導入してJenkinsおじさんを酷使していました。 それ以降、Xcodeプ…

Swiftを使って文字列操作する

文字列操作する方法を手癖で書けるほどSwiftに馴染んでいないので、いつでも見返せるようにメモしておきます。 文字列同士の結合 let str = "daru" + "yanagi" println(str) var str = "daru" str += "yana" str += "gi" println(str) 区切り文字を使って文…

Swiftで数字をUnicodeScalarクラスを使って①や⑩の丸囲み文字に変換する

①や⑩というのを丸囲み文字と呼ぶようです。数値から丸囲み文字に変換する必要があったので調べてみました。 ⓪, ①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩, ⑪,⑫,⑬,⑭,⑮,⑯,⑰,⑱,⑲,⑳, ㉑,㉒,㉓,㉔,㉕,㉖,㉗,㉘,㉙,㉚, ㉛,㉜,㉝,㉞,㉟,㊱,㊲,㊳,㊴,㊵, ㊶,㊷,㊸,㊹,㊺,㊻,㊼,㊽,㊾,㊿, …

Swiftでreduceメソッドを使って配列の中から文字列長の長いオブジェクトを取得する

Swiftで配列の中から文字列長の長いオブジェクトを取得する方法を紹介します。 ここではString型の配列や特定のクラスのString型プロパティの配列から最も長い文字列を持つオブジェクトを取得します。判定の仕方を変更すれば文字列以外での判定をおこなうこ…

Swiftでリフレクションを使ってインスタンスからプロパティの一覧を取得する

Swiftでインスタンスからプロパティの一覧を取得してみましょう。以下のようなPersonクラスがあるとします。 @objc(Person) class Person : NSObject { let age: Int let name: String required init(age: Int, name: String) { self.age = age self.name = …

Swiftで文字列のクラス名からインスタンスを動的に生成させる

文字列からインスタンスを生成する方法として、Objective-Cでは「文字列のクラス名からインスタンスを動的に生成させる - iOSアプリ開発の逆引き辞典」で紹介しているようなコードを書くことで文字列のクラス名称からインスタンスを動的に生成させることがで…

otoolを使ってiOSアプリで使っているframeworkを解析する

ipaファイルの自動生成をするようになると、ipaファイルそのものの解析を依頼されることがあります。僕はバイナリアンではないのでipaファイルを投げられてもよくわかりません。 ipaファイルの正体は、zipファイルの拡張子を変えただけであるものというのは…

Xcode 6.3が公開されました

なんでApple Watch発売直前になってiOS 8.3とXcode 6.3を提供を開始したの……という気もするのですが、今朝方iOS 8.3が公開されました。同時に、Swift 1.2が使えるようになるというXcode 6.3も公開されました。 リリースノートは以下のリンクからみることがで…

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

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

とあるiOSアプリでApp Groupsの処理を追加したらビルドエラーが発生した話

Today Extension対応やAppleWatch対応のためか、iOS 8以降ではApp Groupsと呼ばれる仕組みが追加されました。今回、弊社で開発中の「hoge.app (仮名)」でも採用することになりました。 「Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成…

Mac OS XでXamarin.iOSのクラスライブラリをNUnitを使ってコマンドラインでテストする

勘違いしていたので、以下取り消します。 Mac OS XでXamarin Studioを使ってXamarin.iOSでiOSアプリを開発していると、Jenkins等のCIツールを使ってビルドの自動化をする際にコマンドライン(ターミナル)からユニットテストを動かしたい要望が出てきます……よ…

iPhone向けのイカリングクライアント「ikatomo for Splatoon」

ikatomo(SplatFriends)は、スプラトゥーンのユーザー情報サイト「イカリング (SplatNet)」の情報にアクセスするための非公式アプリです。 ikatomo for SplatoonKENJI WADAユーティリティ¥120 現在の最新版は v2.4 となっています。 機能紹介 v1.5時点での機…

Azure Mobile Services(モバイルサービス)の通知ハブに登録されているiOSデバイスに向けてAPNsを使ってプッシュ通知する

スマートフォンを使っていると当たり前の機能のうちに「プッシュ通知」があります。 たとえば、iPhoneやiPadでGmailアプリなどのメールアプリを使っていると、メールを受け取るとユーザーに向けて「メールを受信しました」とプッシュ通知されます。 プッシュ…

電気通信大学の休講情報アプリについて

これは「UEC Advent Calendar 2014」の20日目の記事です。UECについては別の方が書かれていると思うのですが、UECとは東京都調布市にある電気通信大学のことです。 先に書いておくと、僕はUECの現役学生でもOBでもありません。iPhoneで使える「休講情報 for …

Xamarin.iOSでMD5やSHA1のハッシュ値を計算する

MD5(Message Digest Algorithm 5)は、入力に対して128ビットのハッシュ値を出力するハッシュ関数のことで、不可逆的な一方関数を用いているところから認証などで広く使われています。他にもダウンロードしたファイルが第三者によって作者(配布者)が意図しな…

Xamarin.iOSを使ってiOSデバイスの機種名を取得するライブラリを作りました

過去に「Xamarin.iOSでiOSデバイスの機種名(モデル名)を取得する - 酢ろぐ!」でiOSデバイスの機種(モデル)名を取得する方法を紹介しました。この方法は機種名を取得するものと言うよりかはiPhone7,1といったデバイスモデルの識別子を取得する方法でした。 …

Xamarin.iOSでHtml Agility Packを使ってHTMLをスクレイピングする

この記事は「Xamarin Advent Calendar 2014 - Qiita」の10日目です。 Xamarin Advent Calendarは、Xamarinを使ったアプリ開発のTipsが1日1つずつ紹介されています。この記事はXamarin.iOSについて書いていますが、他の方はXamarin.AndroidやXamarin.Formsな…

Xamarin.iOSで新しいプロジェクトを作成する(Unified API)

過去にXamarin.iOSとXamarin.Macは別々のコードでメンテナンスされていて、さらに64bit対応されていませんでした。それを受けて、2014年9月に品質管理と64bit対応のため統合された「Unified API」が登場しました。過去のものは「Classic API」という位置付け…

Azure Mobile ServicesからiOSアプリにプッシュ通知が送れない問題(追記あり、解決済み)

昨日1日Azure Mobile Services(以下、Mobileサービス)からiOSアプリにプッシュが送れない問題で悩んでいて解決しないので、ちょっと問題の切り分けのために現状を書いていきます。 iOSアプリに対してAzure Mobile ServicesのNotification Hubを使ってプッシ…

Xamarin.iOSでサイズを指定して空の(または単色の)UIImageオブジェクトを生成する

本記事では、Xamarin.iOSを使ってUIImageオブジェクトをプログラム(コード)だけで動的に生成する基本となる方法を紹介します。Objective-Cで実現する方法については下記の記事をご覧ください。 サイズを指定して空のUIImageオブジェクトを生成する - iOSアプ…

Xamarin.iOSで画像(UIImage)をカメラロールへ保存する

Objective-Cで画像を保存するにはUIImageWriteToSavedPhotosAlbum関数を使いました。Xamarin.iOSで同じことをしたかったのですが検索能力が低くて該当するメソッドを見つけることができませんでした。 UIImageWriteToSavedPhotosAlbum関数に相当するメソッド…

Xamarin.iOSでDictionary<TK, TV>型からNSDictionary型オブジェクトへ変換する

TinamiをみるアプリをXamarin.iOSで作りました。実験的な作り方をしていて、まだほとんど何もできません(Tinamiのランキングを見て、ふぁぼるくらいです)。 Illust CatcherKENJI WADAエンターテインメント無料 このアプリでは、アプリの設定値を保存するのに…

Xamarin.iOSで画像をUIImageViewに表示させる

Interface Builderを使用せずに、スクリーン上にイメージを表示させる方法です。UIImageViewを生成してUIImageオブジェクトを設定します。 var imageRect = new RectangleF(0f, 0f, 320f, 109f); using (var myImage = new UIImageView(imageRect)) { myImag…

Xamarin.iOSで自動ロック(スリープモード)に突入させないようにする

セキュリティ、および節電の為にiPhoneやiPadを放置していると自動ロックがかかり、スリープ状態に突入します。 自動ロック(スリープモード)を無効にする 動画閲覧アプリなど長時間ユーザーが触らないことが想定できます。デバイスを触らずに放置していた際…

Xamarin.iOSの開発Tipsの記事まとめ

日本語で書かれたXamarin.iOSについてのTipsがあまり検索で引っかからないので忘備録代わりにメモしています。基本的時自分用に書いているのでザックリとした記載になっていますが、Xamarin.iOSでなにかやりたいという時の逆引きとして使っていただけると嬉…

Xamarin.iOSで指定したフォント名で描画する

UIFontを生成する際にUIFont.FromNameメソッドを使うことで指定したフォント名のUIFontオブジェクトを生成することが可能です。UILabelのFontプロパティに生成したUIFontオブジェクトを設定することで指定したフォントで文字列が表示されます。 特にXamarin.…

Xamarin.iOSでAsset CatalogからUIImage型の画像を取得する

下図のように「NotFoundImage.imageset」という名前でAsset Catalog(xcassets)があったとします。 以下のコードでUIImage型の画像オブジェクトを取得することができます。 var defaultImage = UIImage.FromBundle("NotFoundImage"); 関連記事 Xamarin.iOSを…

Xcode 6.1のOrganizerからiTunes Connectにipaファイルをアップロードしようとしたらエラーになる

iOS 8.1が正式にリリースされたタイミングでXcode 6.1へアップデートしました。アップデート後、初めてバイナリ(ipaファイル)をiTunes Connectへアップロードするタイミングで下図のようなエラーが発生しました。 どうしても改善することができなかったので…

Xamarin.iOSでiOSデバイスの機種名(モデル名)を取得する

iOSデバイスも当初と比較するとiPad、iPod、iPhoneとそれぞれの派生モデルが複数登場してきました。搭載されているメモリや画面サイズなどアプリによって適切な表現方法が異なるケースがよくあります。 Objective-Cを使ってモデル名(機種名)を取得する方法は…

Xamarin.iOSでUIImage型のバッファとbyte[]型とを相互に変換する

Xamarin.iOSでUIImage型のバッファとbyte型とを相互に変換してみましょう。 UIImage型とbyte型とでは相互に直接型の変換をおこなうことができません。一度、NSData型に変換した上で希望する型への変換をおこないます。 UIImageとbyteとを相互に変換する UIIm…