20200223のiOSに関する記事は8件です。

Xcodeのシミュレーターの画面録画する方法

Xcodeのシミュレーターで画面録画する方法を学んだので、共有しておきます。

簡単に解説

  1. シミュレーターを起動する
  2. ターミナルでプロジェクトのディレクトリに行く
  3. xcrun simctl io booted recordVideo testMovie.movで撮影開始
  4. シミュレーター動かす
  5. control + cで撮影終了

丁寧に解説

スクリーンショット 2020-02-23 21.48.51 1.png
【Xcode/Swift5】Xcodeのシミュレーターの画面撮影(画面録画)する方法

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SwiftUIで作成したUI2つほどライブラリ化して公開してみました

はじめに

最近作成したSwiftUIのライブラリ紹介になります。
今回紹介するライブラリを使用するとこんな感じのアプリが作れます↓↓↓

(全体的にこの記事に付けたgifもっさりしててすいません:sweat:)

DotPager

DotPager
Image用のページャーになります。

TagLayoutView

TagLayoutView
Flutterの"Wrap"Widgetいいな〜と思って試してみました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

XcodeGenでSwift Package Managerの依存関係を設定する

下記のドキュメントを参考にしました。
https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ProjectSpec.md#swift-package

環境

Xcode: 11.3
XcodeGen: 2.13.1

XcodeGenとは

Xcodeでのプロジェクトファイルをyamlファイルから生成するものです。
githubリポジトリはこちら
https://github.com/yonaskolb/XcodeGen

サンプルコード

project.yml
name: TestApp
packages:
  HogePackage:
    url: https://github.com/~~~
    version: x.x.x

targets:
  TestApp:
    dependencies:
      - package: HogePackage

依存パッケージをpackagesで宣言して、利用するtargetで依存関係を定義するということですね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初めての個人アプリリリース

はじめに

初めまして、2019年7月からSwiftの独学を初めて、この度、個人開発アプリを初リリースしました?Tomoと申します!

私はiOSエンジニアに転職すべく、独学で「アプリをリリースする」というところに焦点をあてた話をしていきたいと思います!
まだまだレベルも低いですし、開発アプリのリファクタリングなどもこれからという状況ですが、私と同じ、初学者の方に少しでも参考になればと思います!

どんなアプリを作ったか

ParentingIcon2
育児記録アプリを作りました。
簡単に言うと育児状況(授乳、おしっこなど)や予定を記録して管理できるアプリです。
初めてということもあり、シンプルで直感的に操作ができるという点を意識して作成しました。

https://apps.apple.com/jp/app/%E8%82%B2%E5%85%90memo/id1499590588

なぜアプリを作ったのか

一番の理由は、転職の武器にするためです!
業務未経験(特に社会人経験のある者)で転職するに当たって、その武器とするために個人アプリをリリースとするというのは、評価をして頂く一つの指標となると考えたからです。

もう一つの理由は、アプリをリリースするという明確な目標を持つことによってモチベーションも上がり、効率よく勉強することができると考えたからです。

設計図

恥ずかしながら、私が実際に作成したワイヤーフレームを貼っておきますので、参考になればと思います。draw.io(Google Drive)というサービスを使用して作成しました。
また、手書きで書いた物を設計図としてしようできるprottoというサービスもあるみたいなので、そちらが良い方は使って見てください。
これらの情報は、MENTAの講師の方に教えて頂きました。
ありがとうございました。

ワイヤーフレーム 以下
https://drive.google.com/open?id=1AHB4xKmiMHV8fQ2fAUgpoJQDS1C9i3Hq

UI

記録画面 カレンダー 予定入力画面
Scr1 Scr2 Screen Shot 2020-02-20 at 10 22 04

記録画面はButtonをタップすることによって、ボタン画像、現時刻、育児種別がTableViewに反映されるようにしており、日付が変わるとTableViewの内容が更新され、書き換わるようにしています。
データの保存に関してはRealmを使用しました。
苦労した点は、Dateの扱いと、Realmからデータを指定して検索する部分で、特にTableViewの更新はハマりました!
できた時は、そんなことかって感じなんですけどね!

カレンダー画面については、FSCalendarライブラリを使用して作成してます。
UIについては基本的に、StoryBoardで作成していますが、カレンダー画面については、勉強の意味でコードで作成しました。
日本向けに公開するアプリなので、カレンダーとDatePickerの日付表示は日本語に設定し、祝日判定をするライブラリを使用して、土、日、祝日の色を変更して表示しています。
苦労した点は、コードでのオートレイアウトです。

予定入力画面については、入力エリア外をタップすると、キーボードを閉じるように設定しているのですが、ここら辺は、自分で使用して見ても使いづらさがあり、今後改善が必要だと感じました。

開発環境

・xcode11.3.1 (swift5)
・ライブラリ管理 cocoapods
・ハード macbookpro(2018)

反省

  • 全ての画面を1つのstoryboardで管理している
  • プロジェクトの構造(MVCなど)の理解が乏しい
  • コード管理はGitHubで行っているがまだまだ理解が足りない

まだまだ書ききれないほどありますが、今後は上記の点を改善しつつ、リリースしているアプリの改善、さらなる個人アプリ開発を通じて勉強していこうと思っています。

独学するに当たって

学習方法としては、書籍とUdemyなどの動画教材で学習をしてました。
近くに気軽に質問できる人もいない方には動画での学習は、わかりやすいですしおすすめです。
また、エンジニア特化型のQ&AサイトのteratailやMENTAなどのサービスを利用して、不明点などの解消をするのも良いと思います。

独学の大変だった点は、私の場合ですが、仕事の関係上、月の半分以上は自分のパソコンをいじることができない状況でしたし、育児と両立しながら、モチベーションを維持して、学習することでした。
ですが、勉強をしている時は、時間が一瞬で過ぎていきますし、エラーを解決して、アプリが動いた時は、純粋に楽しいと思えたので、それが継続につながったと思っています。

大切だと感じたこと

「自分で考えて、試してやってみる」
これに尽きると感じました。
もちろん上記に記載したとおり、いろいろなサービスを使用して質問をすることはできますが、結局、今作っている物を一番理解しているのは自分ですし、人に全て教えてもらって出来たとしてもそれは力になることはないと思いました。
私も最初は、分からなかったら聞けばいい、くらいに考えていましたが、MENTAの講師に教わってから、自分で考えて、仮説を立てて実行する、それがエンジニアであるという言葉を頂き、その大切さを学びましたし、そうすることで自分自身が成長している実感を得ることが出来ました。

おわりに

まとまりのない文章となってしまいましたが、独学を開始してから、アプリをリリースするまでのお話をさせて頂きました。
私自身、転職活動はこれからですので、まだスタートラインにも立てていません。
ですが、これからエンジニアとして、「挑戦」をして、成長していきたいと思っています。この文が私と同じ初学者に少しでも参考になれば嬉しいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

世界一詳細に全部日本語でXCode11で作った新規プロジェクトをiOS12以前で実行できるところまで解説する

そもそも

ここしばらく新規プロジェクトを作ったことなかったので気付きませんでしたが、2020/02/24現在、最新のXCode11で新規プロジェクトを作成するとそのままではiOS12以前では動かない状態のものが作成されました
いくらSwiftUIを普及させたいからって初心者殺しも大概にせいよってことでiOS12以前でも動かせるようになるまでを手順にしてみました
初心者への分かりやすさを優先したつもりですので、実際そういうことじゃないという箇所がありましても大目に見てください :bow:

環境
XCode version 11.3.1
レイアウト Autolayout
ターゲット iOS 11.0

XCodeを起動する

1は最近起動したプロジェクトが並びますので初めて起動した人は少し画面が違うかもしれません
2のCreate a new Xcode projectをクリックします

プロジェクト を作成する

テンプレートを選択する

こういう画面になりますので、まず1のようにiOSを選択します
次に、2のようにSingle View Appを選択します
最後に3のNextを押します

補足、ここでは何をしたか

プログラムにはだいたいどれも同じようなことを書く定型文があります。
テンプレートとはその定型文のことであり、ここではどの定型文を使うのか選択しています。
XCodeは iOS専用開発ツールではなく、MacやAppleWatchといったメジャーなApple製品全般で動くソフトウェアを開発できるツールです
そのため、まず1で iOSアプリを作る時の定型文を選びましたよという選択をしてます

プロジェクトを保存する箇所を選択する

このような画面になるので好きな場所を選択してCreateボタンを押してください
その指定した保存場所にソースコードなどが配置されます

Targetを変更する

Targetを確認する

このような画面になると思いますが選択されている状態によっては真ん中あたりが違う画面になってるかもしれません
この画面にするためには
1のプロジェクト名の部分を選択します
2のTargetsの中にあるプロジェクト名の部分を選択します
3のGeneralを選択します
これで今度こそ上記の画面になるかと思います

そして4のTargetがiOS XXXになってること確認します
このXXXはiOSのバージョン番号が書かれています

Targetを選択する

上記のようにiOS XXXの部分を選択すると他のiOSバージョンが一覧で並びます
今回はiOS 11.0を選択します

補足、ここでは何をしたか

アプリが動くiPhone本体やiOS自身もどんどんバージョンアップをしています
そのため、古いOSや端末では使えない機能があります
具体例だと顔認証の機能はiOS11.1で初めて追加されました
なので、顔認証のプログラムを組み込んでアプリを出したらiOS11以前のバージョンでは動きません
そのためXCodeで最低限どのバージョンで動かすようにするのかというものを指定する必要があります
逆に古すぎるiOSをターゲットにするとどんどん追加された便利な機能が使えません

補足の補足

Appleとしてはなるべく最新のOSを使って欲しいので新しいOSがデフォルトで選択されています
しかしアプリ開発者はユーザ数を増やしたいのでなるべく古いOSを指定したいものです
具体的な正解はなくその時々でiOSのバージョンの普及率などをネットで調べてTargetを指定してください

iOS11で動くようにソースコードや設定を書き換える

SceneDelegate.swiftを開く

1でSceneDelegate.swiftを選択すると上のような画面になると思います
2がSceneDelegate.swiftの中身のソースコードで赤くなってる部分がエラーを意味しています
エラーになっている原因はさきほどTargetiOS11.0にしたからで、このSceneDelegate.swift自体がiOS11では動きません
3でプロジェクト全体のエラーの総数を表しています

SceneDelegate.swiftを削除する

iOS11で使えないファイルなので削除します
削除したいファイル(SceneDelegate.swift)を選択中に「command」 + 「delete」を同時に押すと上記のようなアラートが出ます
Move to Trashを選択してください

削除はこのような状態になります

1でSceneDelegate.swiftが消えて2でアラートが減ったことが分かると思います

補足、ここでは何をしたのか

プログラムのファイルは当然PCの中にありますが、XCodeはさらにどのファイルが今のプロジェクトに関係のあるファイルなのか設定されています
アラートの中のRemove Referenceは「XCodeの管理から外すけどMacには残す」ということになり、Move to Trashは「XCodeの管理から外すしMacからもファイルを消すよ(ゴミ箱に入れる)」ということになります
いらないファイルを残しておく意味もないのでMove to Trashを選択しました

AppDelegate.swiftを開く

1のAppDelegate.swiftを開くと真ん中が2のようになると思います
これがAppDelegate.swiftに書かれているソースコードの内容です
2の中に赤マルが4と書かれている部分が「ここでエラーが4つ分あるぞ」という意味です
3で分かる通り残りのエラーは6つなのでこのファイルに全てのエラーがあります
これを修正していきます

AppDelegate.swiftにwindowを追加する

上記のように1のvar window: UIWindow?を追加します

AppDelegate.swiftから不要なコードを消す

上記の1で囲われたふたつのfuncを消します

エラーが消えたことを確認する

funcの削除が終わると上記の画面になります
1でエラーが消えたことを確認できます

補足、ここでは何をしたか

iOSが動くにはlet window: UIWindow?というコードが必要なのですが、元はさきほど削除したSceneDelegate.swiftにそれが書かれていました
そのlet window: UIWindow?AppDelegate.swiftに移し、さらにiOS11では動かない不要なコードを削除しました

info.plistを開く

上記のように1のinfo.plistを選択します
真ん中の画面がinfo.plistの内容を表示したものに変わるので2のApplication Scene Manifestを選択します
キーボードのdeleteを押して削除します

削除後の画面はこのようになります

補足、ここでは何をしたか

これもSceneDelegate.swift, AppDelegate.swiftと同様にiOS11では使えない設定を削除しました

プログラムをシミュレータで動かす

プログラムが動く状態になったので実際にiPhoneシミュレータを選択してアプリを動かします

iOS Deviceを選択する

上記の1を選択すると画面が下記のようにシミュレータが一覧で表示されます(シミュレータの数や種類は実際のものとは違うかもしれません)

この中からこれから動かしたいiPhoneを選択します、今回はiPhone8(11.4)を選択しました
(11.4)はOSのバージョンを表しています
選択すると画面は下記のようになります

選択したシミュレータでアプリを動かす

上記の1を押ししばらく待ちます

しばらくすると上記の1のようにシミュレータが立ち上がり画面が真っ白になれば成功です
2を押すと起動中のアプリが終了します

補足、ここでは何をしたのか

iPhone開発ではMacでプログラムを書きiPhoneで動かしますが、プログラムを1行書き変える度にiPhoneにプログラムを転送していては時間がかかります
またiPhoneにも8やXや11など種類がありますが全ての端末を揃えるにはお金がかかります
そのためMacの中に仮想のiPhone(シミュレータ)があるので、そこでプログラムの動作を確認します

以上です

初心者が新規プロジェクト作成してから5分もかからず動かせたら嬉しいです

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

世界一詳細に全部日本語でXcode11で作った新規プロジェクトをiOS12以前で実行できるところまで解説する

そもそも

ここしばらく新規プロジェクトを作ったことなかったので気付きませんでしたが、2020/02/24現在、最新のXcode11で新規プロジェクトを作成するとそのままではiOS12以前では動かない状態のものが作成されました
いくらSwiftUIを普及させたいからって初心者殺しも大概にせいよってことでiOS12以前でも動かせるようになるまでを手順にしてみました
初心者への分かりやすさを優先したつもりですので、実際そういうことじゃないという箇所がありましても大目に見てください :bow:

環境
Xcode version 11.3.1
レイアウト Autolayout
ターゲット iOS 11.0

Xcodeを起動する

1は最近起動したプロジェクトが並びますので初めて起動した人は少し画面が違うかもしれません
2のCreate a new Xcode projectをクリックします

プロジェクト を作成する

テンプレートを選択する

こういう画面になりますので、まず1のようにiOSを選択します
次に、2のようにSingle View Appを選択します
最後に3のNextを押します

補足、ここでは何をしたか

プログラムにはだいたいどれも同じようなことを書く定型文があります。
テンプレートとはその定型文のことであり、ここではどの定型文を使うのか選択しています。
XCodeは iOS専用開発ツールではなく、MacやAppleWatchといったメジャーなApple製品全般で動くソフトウェアを開発できるツールです
そのため、まず1で iOSアプリを作る時の定型文を選びましたよという選択をしてます

プロジェクトを保存する箇所を選択する

このような画面になるので好きな場所を選択してCreateボタンを押してください
その指定した保存場所にソースコードなどが配置されます

Targetを変更する

Targetを確認する

このような画面になると思いますが選択されている状態によっては真ん中あたりが違う画面になってるかもしれません
この画面にするためには
1のプロジェクト名の部分を選択します
2のTargetsの中にあるプロジェクト名の部分を選択します
3のGeneralを選択します
これで今度こそ上記の画面になるかと思います

そして4のTargetがiOS XXXになってること確認します
このXXXはiOSのバージョン番号が書かれています

Targetを選択する

上記のようにiOS XXXの部分を選択すると他のiOSバージョンが一覧で並びます
今回はiOS 11.0を選択します

補足、ここでは何をしたか

アプリが動くiPhone本体やiOS自身もどんどんバージョンアップをしています
そのため、古いOSや端末では使えない機能があります
具体例だと顔認証の機能はiOS11.1で初めて追加されました
なので、顔認証のプログラムを組み込んでアプリを出したらiOS11以前のバージョンでは動きません
そのためXcodeで最低限どのバージョンで動かすようにするのかというものを指定する必要があります
逆に古すぎるiOSをターゲットにするとどんどん追加された便利な機能が使えません

補足の補足

Appleとしてはなるべく最新のOSを使って欲しいので新しいOSがデフォルトで選択されています
しかしアプリ開発者はユーザ数を増やしたいのでなるべく古いOSを指定したいものです
具体的な正解はなくその時々でiOSのバージョンの普及率などをネットで調べてTargetを指定してください

iOS11で動くようにソースコードや設定を書き換える

SceneDelegate.swiftを開く

1でSceneDelegate.swiftを選択すると上のような画面になると思います
2がSceneDelegate.swiftの中身のソースコードで赤くなってる部分がエラーを意味しています
エラーになっている原因はさきほどTargetiOS11.0にしたからで、このSceneDelegate.swift自体がiOS11では動きません
3でプロジェクト全体のエラーの総数を表しています

SceneDelegate.swiftを削除する

iOS11で使えないファイルなので削除します
削除したいファイル(SceneDelegate.swift)を選択中に「command」 + 「delete」を同時に押すと上記のようなアラートが出ます
Move to Trashを選択してください

削除はこのような状態になります

1でSceneDelegate.swiftが消えて2でアラートが減ったことが分かると思います

補足、ここでは何をしたのか

プログラムのファイルは当然PCの中にありますが、Xcodeはさらにどのファイルが今のプロジェクトに関係のあるファイルなのか設定されています
アラートの中のRemove Referenceは「Xcodeの管理から外すけどMacには残す」ということになり、Move to Trashは「Xcodeの管理から外すしMacからもファイルを消すよ(ゴミ箱に入れる)」ということになります
いらないファイルを残しておく意味もないのでMove to Trashを選択しました

AppDelegate.swiftを開く

1のAppDelegate.swiftを開くと真ん中が2のようになると思います
これがAppDelegate.swiftに書かれているソースコードの内容です
2の中に赤マルが4と書かれている部分が「ここでエラーが4つ分あるぞ」という意味です
3で分かる通り残りのエラーは6つなのでこのファイルに全てのエラーがあります
これを修正していきます

AppDelegate.swiftにwindowを追加する

上記のように1のvar window: UIWindow?を追加します

AppDelegate.swiftから不要なコードを消す

上記の1で囲われたふたつのfuncを消します

エラーが消えたことを確認する

funcの削除が終わると上記の画面になります
1でエラーが消えたことを確認できます

補足、ここでは何をしたか

iOSが動くにはlet window: UIWindow?というコードが必要なのですが、元はさきほど削除したSceneDelegate.swiftにそれが書かれていました
そのlet window: UIWindow?AppDelegate.swiftに移し、さらにiOS11では動かない不要なコードを削除しました

info.plistを開く

上記のように1のinfo.plistを選択します
真ん中の画面がinfo.plistの内容を表示したものに変わるので2のApplication Scene Manifestを選択します
キーボードのdeleteを押して削除します

削除後の画面はこのようになります

補足、ここでは何をしたか

これもSceneDelegate.swift, AppDelegate.swiftと同様にiOS11では使えない設定を削除しました

プログラムをシミュレータで動かす

プログラムが動く状態になったので実際にiPhoneシミュレータを選択してアプリを動かします

iOS Deviceを選択する

上記の1を選択すると画面が下記のようにシミュレータが一覧で表示されます(シミュレータの数や種類は実際のものとは違うかもしれません)

この中からこれから動かしたいiPhoneを選択します、今回はiPhone8(11.4)を選択しました
(11.4)はOSのバージョンを表しています
選択すると画面は下記のようになります

選択したシミュレータでアプリを動かす

上記の1を押ししばらく待ちます

しばらくすると上記の1のようにシミュレータが立ち上がり画面が真っ白になれば成功です
2を押すと起動中のアプリが終了します

補足、ここでは何をしたのか

iPhone開発ではMacでプログラムを書きiPhoneで動かしますが、プログラムを1行書き変える度にiPhoneにプログラムを転送していては時間がかかります
またiPhoneにも8やXや11など種類がありますが全ての端末を揃えるにはお金がかかります
そのためMacの中に仮想のiPhone(シミュレータ)があるので、そこでプログラムの動作を確認します

以上です

初心者が新規プロジェクト作成してから5分もかからず動かせたら嬉しいです

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ARKitで2つのポイント間に線を引く

ARSCNViewやARViewで2つのポイント間に線を引きたいことがあります。
勿論一旦ピクセルにしてOpenCVといったライブラリで線を引くこともできますが、ここではオブジェクトを配置して線を引いてみます。

ARSCNView(SecneKit)だとSCNCylinder、ARView(RealityKit)だとgenerateBoxといったオブジェクトで擬似的に線に見立てると思います。
しかし、これはオブジェクトですので、線を引くのと違い、長さと回転をいい具合に調整する必要があります。
オブジェクトの回転ですが、Transform、EulerAngle、Quaternionのいずれかを用いて表します。
ただし、RealityKitでは直接EulerAngleを指定できませんのでTransformを使うか、Quaternionを用いる必要があります。
こういったピンポイントの処理を調べるのが面倒ですのでStack Overflowで調べた結果がこちらです。

EulerAngles

How to draw a line between two points in SceneKit?

let eulerAngles 
    = simd_float3(Float.pi / 2,
                  acos((to.z-from.z)/distance),
                  atan2((to.y-from.y),(to.x-from.x)))

SceneKitでは上記のEulerAngleの計算でうまく動作しました。
なお、RealityKitでは、ここでのEulerAngleの結果をTransformで初期化してもうまく動作しませんでした。

Transfrom(pitch: Float, yaw: Float, roll: Float)
Creates a new transform from the specified Euler angles.

Quaternion

Draw SceneKit object between two points

ここでは2017年3月のTransformの手法が良い回答となっていますが、良い回答からしばらく経った2019年の7月の誰も支持してないQuaternionの回答が良かったのでそれの引用になります。
勿論Transformの手法でも動作することを確認しましたが好みでなかったので割愛です。

手法ですが、長さを求めたうえで内積(cross)と外積(dot)を求めます。

let vector = to - from
let height = simd_length(vector)
let line_axis = simd_float3(0, height/2, 0)

let vector_cross = simd_cross(line_axis, vector)
let qw = simd_length(line_axis) * simd_length(vector) + simd_dot(line_axis, vector)
let q = simd_quatf(ix: vector_cross.x, iy: vector_cross.y,
                   iz: vector_cross.z, r: qw).normalized

平行ベクトルにおける問題

Finding quaternion representing the rotation from one vector to another

Quaternion q;
vector a = crossproduct(v1, v2);
q.xyz = a;
q.w = sqrt((v1.Length ^ 2) * (v2.Length ^ 2)) + dotproduct(v1, v2);

上のコードですと平行ベクトルの場合にハングするようですが、先ほどの線の長さを求める書き方だと一応問題なさそうです。
気づいた方いましたらお知らせください。

正しく制御したコードはEigenのFromTwoVectorsを参照するのが良さそうです。

Swift Playground

こちらにコードをあげました。
https://gist.github.com/otmb/9ab1c43774811ad8c5ff697f3538e762

出力すると球と球の間を繋ぐオブジェクトが配置でき、うまく動作しているようです。

スクリーンショット 2020-02-23 2.46.35.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

xib、storyboardのstringsファイルへの追加方法

はじめに

Interface Builder を多言語対応するには、以下の2つの方法で対応が可能です。
1. Interface Builder Storyboard : 言語毎にStoryboardを作成しレイアウトを設定
2. Localizable Strings : レイアウトは同じで言語毎のstringsファイルを作成

今回、後者を選択後に新たにリソースをstringsファイルに追加する方法です。
情報が少なく見つけにくかったので、忘備録として以下に記しておきます。

環境

  • macOS Catalina 10.15.2
  • Xcode 11.3.1

手順

手順は参考元にあるとおり。

xib、storybaord は Base.lproj フォルダに格納されているので、そこでコマンドを実行。
言語.lproj にstringsファイルが格納されているので、マージすれば追加できます。

参考元

Updating Storyboard and Xib Strings Files Using ibtool

Updating Storyboard and Xib Strings Files Using ibtool

When you change user-facing text in .storyboard or .xib files, use the ibtool command to generate new strings files. Use another tool—for example, FileMerge—to identify the changes and merge them into the existing strings files for each language you support. Xcode doesn’t automatically update the corresponding strings files when you edit a .storyboard or .xib file.

In Terminal, change to the Base.lproj folder, and run this command to generate a strings file for an xib file:

ibtool [MyNib].xib --generate-strings-file [MyNib_new.strings]

Optionally, localize the changes in the output file before merging the changes with the [MyNib].strings file in each lproj folder. To launch FileMerge from Xcode, choose Xcode > Open Developer Tool > FileMerge.

Alternatively, you can use the ibtool command to merge translations back into a nib file and perform other incremental localization updates, as described in the ibtool man page. Or use the appleglot command to manage changes to the strings files, as described in Importing Localizations.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む