カテゴリー別アーカイブ: iOSアプリ開発

なぜSwiftにString.charAt(index)が無いの

JavaでString.charAt(int)はよく使ってたので

利用頻度が低いんでしょうかね?

let str0 = "abc"
let index0 = str0.index(str0.startIndex, offsetBy: 1)
print("str0[\(1)]=\(str0[index0])")

ってやれば”b”が出力されるんですけど、

str0.charAt(1)

とやりたい。仕方ないので、String構造体を拡張します。

 

extension String{
 func charAt(index : Int) -> Character?{
  guard index < self.count else {
   // print("guard")
   return nil
  }
  let i  =  self.index(self.startIndex, offsetBy: index)
  return self[i]
 }
}

 

Swiftの文法はだいぶ馴染みましたが、まだまだ理解に苦しむところがあります。Javaプログラマを長くやり過ぎたかな。

さてと、バイナリーサーチのロジック書かなきゃ。

iPhone X 64GBシルバーを注文

Apple Online Storeでの注文開始が遅い

16:01からずっとアクセスしていましたが、結局注文画面が表示されたのは16:10ごろでした。

11月3日には入手できないみたい

注文殺到したんでしょう。iPhone Xと同時にレザーフォリオ(ブラック)も同時注文したので、若干注文確定まで時間が掛かったのも影響したかも。レザーフォリオは、10月31日配達予定ですが、肝心のiPhone Xは、11月14日から21日の間になってしまいました。まあ、アップルの場合、たまーに予定より早く発送されることもあるので、早まることを期待しますが。

追記10/29:

ネットの記事を読むと、16:01からApple Online Storeにアクセスできていた人はいたようです。私のように10分近く待たされたのは、運の悪い人かも。iMacのSafariとiPadのApple Storeアプリの二つでアクセス繰り返していたのですが、残念。

追記11/10:

案の定で、11月14日から21日の配達予定でしたが、11日に配達されることになりました。

非公式ですが、b-mobileでもAPNプロファイルを入れることにより、ドコモ回線を使用するb-mobile おかわりSIMでも使用できるそうです(サポートにTELして確認しました)。b-mobile的には、Webでの「対応してます」公開を持って、正式対応となるそうです。

 やっぱり高いiPhone X。でも買っておかないといけない理由がある

理由は単純で、iOSのアプリ開発を行っているので、評価用に必要なのです。Xcodeのシミュレータでもいいんですが、遅いし使いづらくて。あとは、10周年の記念ですね。I love Apple products.

Parallels Desktop 11でMac OSの仮想OSのキーボードがJISにならない時

起動時オプションでは解決できなくなっていました

http://d.hatena.ne.jp/m__z/20130909/1378718825

の方が公開されている情報を元に、Parallels Desktop 11のMac OS El Capitanを設定すると、ちゃんとJISキーボードのように’や()などの文字が入力できるようになりました。また円マークも問題なかったです。

どうしてもXcode 6.4を使用する必要が出てきたのですが、mac OS siera上でXcode 6.4を起動しようとするとUnexpected Errorになって解決できなくなって困っていました。

El Capitan上ではちゃんとXcode 6.4が起動できました。

iOSでiCloudを使うSwiftプログラムを作る時

こちらを参考に

http://ascii.jp/elem/000/001/078/1078712/index-2.html

上記の情報を参考して作成すると簡単にできます。

Xcode 8.2, Swift 3だと少しコーディングが変わりますが、Xcodeがアシストしてくれるので簡単に適用できます。iOS 8.4のままにしてあるiPhone5で問題なく動作しました。

ありがたや。

iOSアプリでの独自フォントの使用

Xcode7で作成するiOSアプリで独自のフォントを使用する方法を調べてみた。識者の方に感謝。

まず、フォントはTrueTypeのもので良い。私は今回、
http://matome.naver.jp/odai/2139532113669205301?&page=4
で紹介されているitouhiroさんのPixelMplusを使用させていただいた。

  1. 取り合えず、フォントをダウンロードし、圧縮されていれば解凍する。
  2. プロジェクトにフォントファイルをドラッグ&ドロップする。この時、ファイルがCopyされるようにした方が良い。Screen Shot 2015-12-08 at 17.09.40
  3. Fonts provided by applicationを作成し、小要素のitem 0にフォント名を入力する。適当なところで右クリックしてAdd Rowする。Screen Shot 2015-12-08 at 17.39.49
  4. Build PhasesのCopy Bundle Resourcesにフォント名を追加する。Screen Shot 2015-12-08 at 17.14.03
  5. 取り合えずUILabelあたりで、フォントを選択し、文字列を書いてみる。Screen Shot 2015-12-08 at 17.17.12

シミュレータと実機で表示して確認。
Simulator Screen Shot

余談:
Mac OS Xに先のフォントを登録するだけなら、フォントファイルをダブルクリックし、インストールを選択すれば良い。それだけでちゃんとPhotoShop CCに表示された。簡単!

Xcode 7 GMでのgitプロトコル指定のリモート

OS X ServerのXcodeを有効にしておいて、リモートリポジトリをXcodeで作成すると、プロトコルはhttpsになった。以前から、gitプロトコルを使用していたので、XcodeのSource Controlのremoteに
git://localhost/XXX/XXXX.git
と指定すると、設定はされるが実際にPUSH対象として認識してくれない。
試しにローカル(master)であるディレクトリの中で、
git push origin master
を一回やると、Xcodeはちゃんとremoteを認識してくれるようになり、Xcodeからのpushも成功した。

iPhoneのLaunch画像を作成するときのサイズ

Images.xcassetsなどで画面いっぱいのLaunchImageを作成する場合の画像サイズ。
@2 640×960
@3 640×1136 retina 4

まずは覚書程度。

iOSアプリの起動画面の多言語化

Xcode6だと、起動画面(ローンチ画面)は、iPhone5/5sをベースにするなら、960×1136で作って、Images.xcassetsにLaunch Imageの名前でカテゴリを作って、ファイルを放り込むか、LaunchScreen.xibにViewの中に画像を設定する。

日本語だけならそれでよいのだが、多言語化しようと思った時に「はて?どれをLocalized対象にするんだろう?」と悩んだ。Images.xcassetsもLaunchScreen.xibもJapaneseとEnglishを作ってみたが、iOSの言語に対応して表示してくれない。

そこでGoogle先生に聞いてみると、先達の情報があったので、参考にさせていただいた。
http://source.hatenadiary.jp/entry/2014/06/19/101629
・XXXXX@2x.pngとXXXXX-568h@2x.pngを作成する。
・それぞれのファイルをFile InspectorでLocalizeする。
・それぞれのファイルが、フォルダライクになるので、その中の対応する画像ファイルを(English)なら英語用、(Japanese)なら日本語用にする。
・プロジェクトのGeneral→App Icons and Launch ImageのLaunch Images sourceは無し(Use Asset Catalog)が表示されている状態にする。
・info.plistに、「Launch Image」を作成し、「XXXXX」
・オプションキーを押しながら、Productメニューを開き、Clear Build Folderを行っておく。(一応)

これでiOSの言語を日本語、Englishに切り替えるとそれぞれに対応した起動画面が表示された。

あまり起動画面を変更することってないかもね。

StoryboardのローカライズをLocalizable Stringsにするか、言語ごとのStoryboardを作るか

Localizable Stringsは、BaseとなるStoryboardが無いとできない。Baseがあると、Localizable Stringsも言語ごとのStoryBoardも、Storyboardファイルのファイルインスペクタで選択できる。
Baseを作るかどうかは、プロジェクトのファイルインスペクタの下部にある「Use Base Internationalization」で決まる。
Localizable Stringsの場合、Storyboard上でLabelなどを追加しても、Stringsのファイルには反映されない。Stringsのファイルを再作成することになるが、そうすると、それまで翻訳した文章はBaseのStoryboardのものに戻る。
この辺をうまく反映してくれるシェルはあるようだ。

ただ、英語と日本語で、文字列長などの違いでレイアウトが異なる可能性があるような場合には、フォントサイズを変えたくなるので、Localizable Stringsを使用せずに、Storyboardを各言語ように持つのがよいかもしれない。
ただ、それでも、Baseで大きなレイアウト変更があると、各言語のStoryboardにその変更を反映しなければならないので、悩ましところ。

Main.storyboardの他言語の動作

Main.storyboardとして、JapaneseとEnglishをFile inspectorのLocalisationで作成したとする。
iOSの言語が日本語ならJapanese、英語ならEnglishのStoryboardが使用される。ここまでは予想通り。
さて、それ以外の言語ならということで試してみた。スペイン語を選択し、表示すると、Info.plistのLocalization native development regionにJapanを設定しているとJapaneseのstoryboardが、enを設定しているとEnglishのstoryboardが使用されることをiOS Simulatorで確認した。