ios10

iOS10のFontFamilyName

旧OS iOS8系でフォントの一覧 iOS9系でフォントの一覧 iOS10系でフォントの一覧 iOS11系でフォントの一覧 iOS12系でフォントの一覧 iOS10でフォント一覧を書き出すの忘れていた。 Swift3での取得方法が気に入らなかったので修正。ObjCとそーとのロジックが異なるけどもう不要かなって気もする。 取得方法 familyNameからfontNameを取得する。今回からソートするようにした。 //////////// // Objc NSMutableArray<NSString*> *array = [NSMutableArray array]; for (NSString *familyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]

xcode

StoryboardやXibで 簡単にAttributed Stringを使う/RGB指定した色に違和感があったら

誰得2本立て。 簡単にAttributed Stringを使う StoryboardやXibを使って静的なテキストを設定するとき、例えばアンダーラインだったり一部だけフォントの色を変えたりするようなときはPlainではなくAttributedなテキストを使うわけなんですが、個人的にXcodeでは設定がうまく反映されなかったりして結構大変というか地味にめんどくさい。 そんなときは標準アプリ テキストエディット(/Applications/TextEdit.app) がオススメ。 テキストエディットでファイルを新規作成して、テキストを装飾したらテキストエディットでコピーして、そのままXcodeのUILabelなどにペーストすると装飾も一緒に貼り付けできる。 コピー&ペーストはPlainなテキストではなく背景色や文字の色など装飾も一緒に(Attributed)なテキストとして扱える。 RGB指定した色に違和感があったら XcodeでRGB(Hex)を使ってを指定するときは大体こんな感じ。 Colorsウィンドウでは指定されたRGBの値をスポイトマークの左側に表示してくれます。 デザイナーさんから「RGBは 0x4A90E2 でお願いします(alphaは当然FFという前提)」みたいに連絡されるわけなんですが、なぜかこんな事態も稀に。 1枚目

xcode8

Xcode8でBundle IDを設定する

Xcode8でBundle Identifier(以降Bundle ID)を設定する方法。 たしかXcode7あたりから設定箇所が変わりましたよね。 プロジェクトを作る Bundle IDはプロジェクトを作るときに設定する項目から自動的に作成されます。 <Bundle ID> = <Organization Identifier>.<Product Name> Bundle IDを変更する ただ単にBundle IDを変更する場合の手順 Project Navigator(左ペインの一番左のアイコン) プロジェクトの設定を開く Bundle IDを変更したいTARGETを開く Bundle Identifierを書き換える

ios

iOS開発初心者に知ってもらいたい開発スキル

この記事は画像がたくさんだったりしてすごく長いです。 SwiftでiOS開発の勉強をしている会社の新人と話をしているときに実装中のコードを見せてもらうと気になる実装があった。 let action = UIAlertAction(title: "title", style: .default, handler: { (action: UIAlertAction!) in ... }) UIAlertActionのイベントハンドラになるクロージャの引数の型が違う。 このイニシャライザのメソッド定義はこちら。 open class UIAlertAction : NSObject, NSCopying { public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) ->

xcode

iOS10.1 ATS

前回の検証がBeta版だったので安定版でも検証した 検証環境 iPad Pro 9.7 iOS10.1 Xcode 8.1 Swift3 検証方法 非SSLリクエスト先はhttp://www.example.com SSLリクエスト先はhttps://www.example.com 非SSLリクエストとSSLリクエストを行い結果を確認する(合計8つのリクエスト) UIWebView WKWebView NSURLSessionで該当URLのソースコードをダウンロードして表示 NSDataで該当URLのソースコードをダウンロードして表示 これらのリクエスト結果がATSの設定パターンでどのように変わるのかを比較する 検証手順 上記検証方法に対応したプロジェクトを作成して実機起動(シミュレータは実機と異なる動作をすることが多いため) http(s)

xcode

iOS10 ATS設定について

iOS10.1で検証しなおして表にしました。 この記事の内容はBeta版の動作です。 iOS10からATS(App Transport Security)の設定が増えるということと、「Webに接続するiOSアプリは2017年1月からHTTPSの使用が絶対条件になる、デベロッパーはご注意を」で色々と騒がれていましたが最近はあんまり聞かないですね。iOS10のリリースも近いはずなのに。 上のリンクのソースはこのPDFのp.100みたいです。 App Transport Security + Required by App Store at end of 2016 + TLS v1.2, with exceptions for already-encrypted buld

xcode

iPhone Simulatorでも通信速度調整したい

1. dmgファイルをダウンロードする ここからインストールしているXcodeに対応した Hardware IO Tools をダウンロード もしくはXcodeからダウンロードサイトを開いて Hardware IO Tools を検索してダウンロード 2. Network Link Conditioner をインストール dmgファイルを展開する Network Link Conditioner.prefPane を開くとシステム環境設定に追加される システム環境設定の Network Link Conditioner を開く あとはもう見たらわかるレベル

xcode

Swiftのコンパイルはストレスが溜まるので

SwiftでiOSアプリを作成しているとコンパイル速度が遅くてストレス溜まるなーというタイミングが多々あるのでコンパイル速度というかストレスを減らそうという対応を幾つか記載。 やったこと プロジェクトのコンパイル時間計測オプションを設定する Xcodeプロジェクトの Bundle Settings にある Swift Compiler - Custom Flags で -Xfrontend -debug-time-function-bodies を設定する BuildTimeAnalyzer を入れる BuildTimeAnalyzer プラグインをインストールする 現行バージョンではBuildTimeAnalyzerの更新中にビルドし直すとクラッシュするけど重いメソッドが見られるので便利。 InterfaceBuilderの自動コンパイルを止める StoryboardかXibファイルを開いてInterfaceBuilderが表示されているときに Automatically Refresh Views のチェックを外す。 Xcode -> Editor ->

ios

Xcodeでコードを書かずに角丸のボタンを作る

タイトルの通り、プログラムらしいことをしないで角丸ボタンを表示する 手順 角丸画像を用意する XcodeのAssetに画像を追加する 画像のスライス設定で可変領域を設定する 角丸画像を表示したいボタンの背景画像(Background image)に設定する コードで実装する 覚えてたら後で書く その他 動画のアップロードがイケてない。youtubeとかじゃないとうまくいかないのかも。

ios

iOSアプリのDBをCoredataからRealmへ

現時点の最新バージョン v0.96.2 での内容なので、バージョンによって違うかもしれないです。 GUIをインストール ブラウザが無いと閲覧できない。最新バージョンのzipをDL。 公式の日本語ドキュメントは最新バージョン用ではない可能性があるのでgithubのURLから直接落とす方が安心。 https://github.com/realm/realm-browser-osx/releases/ Xcode Plugin XcodeでModelファイルを新規作成するにはPluginを入れると簡単になるらしい。 Xcode Pluginは公式ドキュメントにならってAlcatrazからインストールする。 Xcode Pluginのインストールディレクトリパスはこちら ${HOME}/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins Alcatrazのインストール コマンドラインから実行

xcode

Xcodeプロジェクトの残骸Schemeを消す

gitを使って開発しているとSchemeを追加/削除などで、Xcode上に残骸が出ることがある。 該当するアイコンがないので歯車が表示されるが、ユーザの設定を削除することで解消できる。 Xcodeの該当プロジェクトを閉じる ターミナルで下記コマンドを実行 $ cd path/to/project $ rm -rf <Your Project>.xcodeproj/xcuserdata/<Your Name>.xcuserdatad 極論xcuserdata配下のデータはすべて削除しても問題ないと思う。 .gitignoreに*. xcuserdatadを追加していても問題ない。

xcode

Xcode7からのBundle Identifier定義

--- 追記@2016/12/6 こっちにXcode8での設定方法を書きました --- 追記ここまで Xcode6系まではinfo.plistで直接定義する形だったけど Xcode7からはProjectファイルで定義するようになって、info.plistのbundle identifierの項目はこんな感じになっていた(Xcodeのマイグレーションをするとこうなるということで。 $(PRODUCT_BUNDLE_IDENTIFIER) メリット ビルド設定(Build Configuration)でバンドルIDが変更できるようになった。 Debugビルド、Releaseビルド、AdHocビルドなどでバンドルIDが変更できるのでターゲットを無駄に追加する必要が無くなった。 デメリット 理解していない人がinfo.plistを書き換えたら死ねる。 下手に書き換えられたら別アプリになるから。。。

ios

GoogleAnalyticsを組み込んだiOSアプリがiOS9実機ビルドできなかった

表題の通りGoogleAnalyticsを組み込んだiOSアプリのiOS9実機ビルドでエラーが出た。 とりあえず何も考えないでGoogleAnalyticsを最新版に更新したが変わらなかった。iOS9対応というかXcode7対応。 https://developers.google.com/analytics/devguides/collection/ios/v3/sdk-download?hl=ja エラー内容 ld: '/Users/xxxx/path/to/app/Libs/GoogleAnalytics/libGoogleAnalyticsServices.a(TAGDataProvider.o)' does not contain

ios

iOSエンジニアに知っていてほしいブレークポイント

アプリを改修するiOSエンジニアが知っていると得をするブレークポイント。 デバッグするときにブレークポイントを使用しないエンジニアはあまりいないと思う。 アプリを改修することになったとき、元々自分が実装したアプリ以外は画面の構成やイベントハンドリングが自分の思想とは全然違うことがあって、どこで画面遷移が行われているのか。どの画面がいま表示されている画面なのかわからないということはよくある。 そんなときに使うブレークポイントがSymbolicBeakpoint。 Xcodeで「⌘+7」を押してブレークポイントを表示して、ウィンドウ左下の+ボタンから作成する。 [UINavigationController pushViewController:animated:] [UIViewController presentViewController:animated:completion:] こんな感じで設定しておけば、このクラスメソッドやインスタンスメソッドが実行されるときにブレークポイントが作動して止まってくれる。 上記の場合だど実際にはUIKitのメソッドで停止するのでスタックを辿る必要があるけど、 どのクラスのどのメソッドから画面遷移のイベントが実行されたか判断できる。

ios

UITabBarの色を変える

UITabBarControllerのデザインをちょこちょこ調整する必要があった。 またいつか使いそうな気がするのでメモ。 この設定はiOS7.1系以降なら問題なく動くと思う。7.0系は問題があったようななかったような。 + (UIImage *)imageFromColor:(UIColor *)color size:(CGSize)size { CGRect bounds = CGRectZero; bounds.size = size; UIGraphicsBeginImageContext(bounds.size); CGContextRef contextRef = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(contextRef, [color CGColor]); CGContextFillRect(contextRef, bounds); UIImage

program

Xcodeでメソッドにコメント書く

コメントは大事 例えばこんな感じで書くと色々と便利。メソッドだけじゃなくてプロパティとかただの変数でもいい。 /** @method increment: @param i NSInteger 数値 @return 引数iをインクリメントして返す 引数iをインクリメントして返すお仕事 */ - (NSInteger)increment:(NSInteger)i { return ++i; } 気をつけること コメントは/*!ではなく/**で始めた方がいい。Swiftで/*!が無視された(今は違うかも? 説明を書くときは空行を入れる、もしくは@discussionを使う この2つくらい。 使い方 コメントを書いたメソッドをクイックヘルプ(オプション+

ios

ifdefとかのマクロ

iOSアプリを開発している人にはおなじみであろうマクロ #ifdef DEBUG // do something #endif Xcodeでプロジェクトを作成するとDebugビルドにはDEBUGがPreprocessor Macrosの初期値として設定されているので使用している人は多いと思う。 この#ifdefとかに混ざって#ifも使われていたりしてマクロがカオスになっているソースがたまにある。 ということで検証 // フラグ作成 #define TEST_FLG 1 // ifdefの場合 #ifdef TEST_FLG NSLog(@"ifdef TEST_FLG Success"); #else NSLog(@"ifdef TEST_

objc

IBInspectableを使ったらエラーが出た

IBInspectableを使うとInterfacebuilderがよしなに表示を変えてくれるとかいうのは知ってた(試しに使ったことはあった程度だった)けど、IBInspectableを使っているライブラリがあったので使ってみた。 IB Designables Failed to render instance of XXX: Rendering the view took longer than 200ms. Your drawing code may suffer from slow... こんな感じのエラーが出た。xibファイルが無駄に複雑で巨大なせいでレンダリングが遅い画面だったけど、IBInspectableを使った結果余計なエラーが出るようになった。 もちろんビルドには問題ない。ただ気持ち悪いだけで。

objc

Xcode6.1.1で実機が選択できなかった

先日買ったiPadに開発中のアプリをインストールしようとしたらデバイス一覧に表示されず2日間ほど無駄をしてしまった。 プロジェクトのバンドルIDもプロビジョニングも問題無いことは確認済みだった(別Macではインストールできた)ので、MacかXcodeの設定に問題があるのだろうと思っていた。 解決方法 実機をMacに接続 ステータスバーのWindow > Devices Devicesウィンドウの左上DEVICESで該当の実機を[Ctrl+Click] Show in Run Destinations Menuをクリック(チェックがついたらOK) 参考 Stack Overflow

ios

Xcode6のシミュレータのディレクトリ構成

アプリケーションがインストールされるディレクトリ ~/Library/Developer/CoreSimulator/Devices/<該当シミュレータのハッシュ値>/data/Containers/Bundle/Application/ アプリケーションのデータが設置されるディレクトリ ここにDocuments, Library, tmpなど入ります ~/Library/Developer/CoreSimulator/Devices/<該当シミュレータのハッシュ値>/data/Containers/Data/Application/<アプリケーションのハッシュ値>/ 該当シミュレータのハッシュ値は下記plistファイルに記載がある ~/Library/Developer/