highlight.xcode

2016年5月19日木曜日

UITableView 上部の隙間を消す



「UITableView」を使用した際に、テーブル上部に出来る隙間がどうしても消せなくて、悩んだ時のメモ。

「UITableView」はデフォルトでスクロール可能になっているのだが、「UITableView」の設定でスクロールをオフにしても、テーブル上部にスクロール用のマージンと思われる隙間が残ってしまい、これを消すってだけでかなり悩んだ。

答えはここに在った。
「View Controller」にも設定が在るとよ!
こんなん解る訳無い…。
軽く怒りを覚えたわ…。

「View Controller」の「Attributes inspector」->「View Controller」->「Layout」の「Adjust Scroll View Insets」をオフにすれば良いとのこと。



いくら初心者とはいえ、ちょっとした事で引っ掛かりまくりで、作業の進みがすこぶる悪い…。
イライラするわー

Auto Layout 時の Navigation Bar の取り扱い



ストリーボードで画面遷移を構成する際に「Navigation Controller」を使用するのだが、この時に画面に自動的に追加される「Navigation Bar」が「Auto Layout」で上手く取り扱えなくて困った時のメモ。

「Navigation Bar」が画面上で一番上に位置するオブジェクトになるので、それより下に位置するオブジェクトの位置制約には、「Navigation Bar」からの相対位置を指定するのが自然だと思う。

ところが、この「Navigation Bar」が手動で画面に追加したものの場合は問題無いのだが、「Navigation Controller」により自動的に追加されたものの場合、「Auto Layout」上では無視されてしまい、相対位置指定に使用出来ないのだ。

結論を言うと、「View Controller」の「Attributes inspector」->「Simulated Metrics」->「Top Bar」を「Opaque Navigation Bar」に、「Bottom Bar」を「None」に設定する事で、「Top Layout Guide」の位置が「Navigation Bar」の下になってくれるので、この位置からの相対位置を制約に設定する事が出来る。



「Opaque」は「不透明化」といった意味らしい…。 Apple 歴なんて 2ヶ月にも達していないのだが、Mac とか Xcode のメッセージや、プロパティ名、プロパティ値の内容や単語って、つくづく解りにくいというか、直感的でないというか…。これも「Displaing Navigation Bar」とかで良いじゃんよ…。

2016年5月17日火曜日

Xcode の Unexpected code bundle エラー



Xcode をアップデート後、起動してみたら以下の様なメッセージが出た。



「予期せぬコードバンドル」といった意味だが、言葉の意味が解っても、何のエラーかよく解らないという、いつものパターン…。 多分、Apple 謹製ではないプラグインが警告を受けているのだと思う…。

とりあえず「Load Bundles」としておいた。

Xcode のアップデートでハマる



Xcode のアップデート通知が来たので、アップデートしようとしたが「待機中」の表示のまま進まない…。

検索したら、出るわ出るわ…。もはやアルアル系の話題といえる程、アップデートでハマったという記事が溢れていた…。

参考になったのはここ
Xcode をアンインストールする、という乱暴なものだが、たしかにこれで問題は解決し、インストールが進みだした。

しかい、サイズが「3.8GB」、時間には「2時間30分」と表示される…。
やっぱ、夜間にやった方が良かったな…。

2016年4月29日金曜日

Xcode のサイズの単位



Xcode のストーリーボードで画面を作っていて、ふと気になった。

オブジェクトを貼った「View」を「Scroll View」へと貼り付けるとスクロールする様になる。 だが、縦スクロールだけでいいのに、横スクロールもしてしまう。 「Scroll View」の設定で出来そうなものだが、実は出来ない。 「Scroll View」へと貼り付けたオブジェクトが「Scroll View」より大きい場合に、勝手にスクロールする様になるのだ。 なので、縦スクロールのみに限定したい場合は「Scroll View」へ載せるオブジェクトの横幅を、「Scroll View」の横幅より小さくしなくてはいけない。また、縦スクロールさせるには表示エリアより縦に長い「Scroll View」が必要なのだが、その為には「View Controller」のサイズを縦長に変え、縦に長い「Scroll View」全体を表示しなければ、その上にオブジェクトを配置する事すらできない。

で、「View Controller」のサイズを変えようとしたのだが、どういうサイズが良いのか悩んでしまった。とりあえず、「iPhone 5s」に合わせてみようと思い Wikipedia で画面サイズを調べたら「640 × 1136」ピクセルだったので、横幅を「640」にした所、明らかに「iPhone 5s」の横幅より大きい。

ここでまた悩む。
そもそも Xcode でサイズの指定に使っている単位は「ピクセル」ではない?
そう考えて、調べてみた所「ポイント」という単位なんだそうな。

結局、「iPhone 4」以降の「Retina」ディスプレイを搭載した機種の場合は「1 ポイント = 2ピクセル」。 「Retina」ディスプレイ搭載以前の機種の場合は「1 ポイント = 1ピクセル」となるんだそうだ。

という訳で、「iPhone 5s」を想定した画面の横幅は「320ポイント = 640ピクセル」が正解だった。

念の為書いておくと、もちろん画面サイズに依存したデザインはタブーだと思います。
あくまで Xcode で作業する上での「View Controller」のサイズの話です。

2016年4月28日木曜日

Swift のエラー NSUnknownKeyException 再び



以前にも書いたが、また「NSUnknownKeyException」というエラーが発生した。

前回は、コードを直接編集してしまった為に、ストーリーボードとコードとの整合性が崩れてしまった訳だが、今回は普通にストーリーボードを編集しただけで発生。
これって Xcode のバグなんじゃ…。

とりあえず、ストーリーボードのソースを直接編集して対応した。

「Main.storyboard」のコンテキストメニューから、「Open As」->「Source Code」でストーリーボードのソースを表示。 「command + f」で疑わしいオブジェクト名をソースの中から検索。<connections> の <outlet> に余分なのが居たので削除。

これでこのエラーは消えた。

ストーリボードに戻るには、同じくコンテキストメニューから、「Open As」->「Interface Builder - Storyboard」をクリックすれば OK。

ストーリボードの編集画面って「Interface Builder」って言うのね…。

2016年4月27日水曜日

Vine Server(OSXvnc)



以前書いた「VNC で option キーが送れない」問題は、その後も解決出来ていない。2ch やアップルサポートコミュニティにも質問してみたが、回答 0件…。ウェブ上の情報も概ね解決には至っていない…。

そんな中、「OS X の画面共有は止めて、Vine Server という VNC サーバーを使うと良い」という様な情報が在ったので、試しに使ってみた所、少なくともモディファイヤキーに関してはマトモに動作してくれた。
パッケージは testplant.com からダウンロード出来る。

ただし、例によってキーボードレイアウトが US になってしまうという問題が残った。
一応、内部的に US-Keylayout から JP-Keylayout への変換をしていてくれているので、ほとんどのキーは問題無く打てるのだが、一部のキーがおかしかった。

入力したキー 入力される文字
ˆ 6
' "
= +
@ 2
` ˜
: ;

色々検索しているうちに日本語キーボードパッチなるモノも見つかったが、いかんせんバージョンが解らないわ、古いわで役に立たなかった…。

結局、自力で改造してみる事にした。
Source Forge: Vine Server (OSXvnc)」->「web-based CVS repository viewer」->「Download GNU tarball」からソースがダウンロード出来る。
バージョンは「4.01」。
ライセンスは「GPLv2」。

早速、ダウンロードして、解凍して「OSXvnc.xcodeproj」を Xcode で開いて、ビルドしてみた。
環境は「OS X El Capitan 10.11.4」上の「Xcode 7.3」。

やはり古いソースなので最新の環境とは設定が合わないらしく「Update to recommended settings」と質問されたので、とりあえずお薦め設定にしてビルドしてみた。

一応ビルドには成功したものの、警告23個…。
早速、Windows 側から VNC で接続してみたが、「メッセージの長さが合わないよ。続ける?」みたいなメッセージが永遠と表示され、まともに使えなかった…。

結局、時間はかかったものの、この問題は解決出来た。
Vine Server(OSXvnc) の最終バージョン(4.01)は 32bit バイナリなのに、ビルド環境が 64bit なせいで、前述のお薦め設定により「Build Settings」->「Architectures」が「Standard Architectures (64-bit intel)(x86_64)」になってしまっていた。
これを「Universal (32/64-bit intel)(x86_64, i386) - S(ARCHS_STANDARD_32_64_BIT)」に変更してビルドし直した所、使えるバイナリが出来た。

さて、本番はここからなのだが…。

警告のほとんどは、キャストや型書式に関するものだったので、適当に修正した。
残る 3つは「'xxx' is deprecated: first deprecated in OS X 99.9」といったもの。
これは「'xxx' は OS X バージョン 99.9 で廃止されますよ。」という警告なので放っておくしかない…。
最適な移行方法も、警告抑制の仕方も解らないしなぁ…。

結局、「XCodeでのwarning抑制方法」を参考に、警告抑制した。

後はおかしいキーを直すだけ…。

キーイベントの処理を探す為、ソースの中を「keyboard」等で検索し、あちこち眺めてみた所、「VNCServer.m」の「handleKeyboard」がそれらしいと解った。

多分、この関数の引数が入力キーで、この関数の中から呼ばれている「sendKeyEvent」関数への引数が出力キーっぽいので、「NSLog」を仕掛けて観察。その結果と、US-Keylayout での入力方法を突き合わせて、入力と出力のズレを整理した。

入力キー 入力コード 出力文字(誤) 出力コード(誤) 出力文字(正) 出力コード(正) 結果
ˆ 0x5E 6 0x16 ˆ(6 + shift) 0X16 + shift shift が不足
' 0x27 + shift " 0x27 + shift ' 0x27 shift が余分
= 0x3D + shift + 0x18 + shift = 0x18 shift が余分
@ 0x40 2 0x13 @(2 + shift) 0x13 + shift shift が不足
` 0x60 + shift ˜ 0x32 + shift ` 0x32 shift が余分
: 0x3A ; 0x29 :(; + shift) 20x29 + shift shift が不足

結果としては「shift」が余分か、足りないか、という事だった。

こういうのはテーブルがちょっとズレてるだけとか、簡単に治りそうなもんんだけどなぁ…。
キーの定義は「kbdptr.h」に在ったが、キーとモディファイヤキーの組み合わせをどう定義しているか解らなかった…。

結局、「sendKeyEvent」関数を呼び出す直前に、「sendKeyEvent」関数への引数へ対し「shift」を足したり、引いたりする処理をぶち込んじゃった…。

次に、マウスホイールでのスクロールが異常に遅かったので、「handleMouseButtons」関数でマウスホイールの移動距離を格納している「mouseWheelDistance」変数を 4倍する処理も入れた。

あとは、クリップボードが異常な挙動をする問題も在ったのだが、これは VNC クライアント側でクリップボードの共有を止めれば問題無くなった。クリップボード共有出来た方が便利なんだけど、仕方がない…。

残るは、ログイン、ログアウト関連が対応出来てない臭いけど…。
当分これで様子を見てみようと思う。

オープンソース万歳!!!!!

2016年4月24日日曜日

Xcode でコードの折りたたみ



Xcode でのコードの折りたたみ方法をメモ。

Xcode のメニューから「Xcode」->「Preferences」->「Text Editing->「Code folding ribbon」にチェックを付ける。


これでコードが折りたためる様になったんだけど、enum が折りたためない件…。
ドイヒー…。

Xcode で API コメント



Xcode で API コメントを書く際、補完機能が全く無いのが不便で、調べてみたらプラグインの紹介記事が見つかったのでメモ。

VVDocumenter-Xcode」というプラグインを導入すると自動補完機能が得られるらしい。
が、その前に「Alcatraz」というパッケージマネージャを導入する。

ターミナルで以下を実行すると、インストールされる。
$ curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   590    0   590    0     0    322      0 --:--:--  0:00:01 --:--:--   322
 15  110k   15 16975    0     0   3984      0  0:00:28  0:00:04  0:00:24  8981x Alcatraz.xcplugin/
x Alcatraz.xcplugin/Contents/
x Alcatraz.xcplugin/Contents/Info.plist
x Alcatraz.xcplugin/Contents/MacOS/
x Alcatraz.xcplugin/Contents/Resources/
x Alcatraz.xcplugin/Contents/Resources/ATZPackageListTableCellView.nib
x Alcatraz.xcplugin/Contents/Resources/ATZPluginWindowController.nib
x Alcatraz.xcplugin/Contents/Resources/bitbucket_grayscale.tiff
x Alcatraz.xcplugin/Contents/Resources/en.lproj/
 45  110k   45 50767    0     0   9669      0  0:00:11  0:00:05  0:00:06 17633
x Alcatraz.xcplugin/Contents/Resources/git_grayscale.tiff
x Alcatraz.xcplugin/Contents/Resources/github_grayscale.tiff
x Alcatraz.xcplugin/Contents/Resources/link_icon.tiff
x Alcatraz.xcplugin/Contents/Resources/en.lproj/InfoPlist.strings
x Alcatraz.xcplugin/Contents/Resources/en.lproj/Localizable.strings
100  110k  100  110k    0     0  15659      0  0:00:07  0:00:07 --:--:-- 23353

Alcatraz successfully installed!!1! Please restart your Xcode (7.3).

Xcode を再起動すればパッケージマネージャの導入は完了。
再起動時に警告がでるので「Load Bundle」をクリック。


Xcode のメニューから「Window」->「Package Manager」をクリックすると、パッケージマネージャが開くので、「VVDocumenter-Xcode」を検索し、「INSTALL」をクリック。


インストール後、Xcode を再起動すると有効になる。
関数の前の行で「///」を入力すると API コメントのスケルトンが挿入されるので、適宜修正する。

うん、こりゃ便利。
だけど、デフォルト設定だとブロックコメント形式なのが気にいらない。
/**
 Description

 - parameter callBackCycle: <#callBackCycle description#>
 - parameter callBackFunc:  <#callBackFunc description#>

 - returns: <#return value description#>
*/

Xcode のメニューから「Window」->「VVDocumenter」をクリックすると、設定画面が開く。
一番下の「Prefix each comment line with three slashes」を選択するとラインコメント形式になる。


これでよし。
///  <#Description#>
///
///  - parameter callBackCycle: <#callBackCycle description#>
///  - parameter callBackFunc:  <#callBackFunc description#>
///
///  - returns: <#return value description#>

2016年4月23日土曜日

Swift のバージョン確認



Xcode で使用される Swift のバージョンを確認する方法をメモ。

ターミナルで以下を実行すると、Xcode で使用されている Swift のバージョンが確認出来る。
$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -version
Apple Swift version 2.2 (swiftlang-703.0.18.1 clang-703.0.29)
Target: x86_64-apple-macosx10.9
Swift バージョン 2.2 みたいです。

Swift のエラー NSUnknownKeyException



またまた、意味が解らないエラーでハマり、例によってその原因がしょーもなかったのでメモ。
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key labelAccelX.'
***
と怒られた。
そして、まったく意味が解らなかった…。

要するに「labelAccelX っていうキーが見つからないよ」ってエラーなんだけど、
「え、キー?」
「 コレクションの扱いがまずかったのか?」
としか考えられず、数十分間あれこれ悩んだ。

結局コレは Swift というより、ストーリーボードの問題だった…。

ストーリーボード上のオブジェクトを、コード側へ参照させた後に、コード側でオブジェクトの名前(というか、オブジェクト参照している変数の名前)を変えただけで、このエラーが起こってしまう…。そして、そのエラーの内容が抽象的過ぎて、実際の問題に気付けないっていう…。

要は、ストーリーボード側で管理している変数名やメソッド名のコレクションに齟齬が生じている、ってエラーだったんだけど、もっと解りやすいメッセージにして欲しいなぁ…。

まとめ
  1. 自動生成された変数名、メソッド名等は直接変更しない
  2. 変更したい時は、ストーリボード上でコネクションを一旦削除
  3. 再度ストーリボードからコードへコネクションを張り直す際に、新しい名前を付ける
  4. その後、古い変数、メソッドを削除する

2016年4月22日金曜日

Swift のエラー Cannot convert value of type 'X' to specified type 'Y'



Swift on Xcode で意味が解らないエラーでハマり、しかもその原因がしょーもなかったのでメモ。
let motionSetting: MotionSetting = MotionSetting
(
    callBackCycle: cycle
    , callBackFunc: funcX
)
という様なコードを書いたら、
「Cannot convert value of type 'MotionSetting' to specified type 'MotionSetting'」
と怒られた。いや型合ってるし。

で、正解はコレ。
let motionSetting: MotionSetting = MotionSetting(
    callBackCycle: cycle
    , callBackFunc: funcX
)
イニシャライザ(コンストラクタ)の最初の括弧が折り返っていただけ…。
なんじゃそりゃ…。

2016年4月19日火曜日

Blogger でコードハイライト

ここに、そのものズバリの記事が在ったので参考にさせてもらった。

highlight.js」のページで「Get version x.x.x」をクリック。


Getting highlight.js」のページに、CSS とスクリプトの定義が 2種類有るので、好きな方をコピー。


Bloggerの設定から「レイアウト」->「ガジェットを追加」->「基本」->「HTML/JavaScript追加」->「+」で編集画面を開き、「コンテンツ」にペースト。「タイトル」を適当につけて「保存」。


後は記事の中で、起動スクリプトを実行し、コードにクラスを設定すると、
<script>hljs.initHighlightingOnLoad();</script>

<pre><code class="swift">
var a =  1;
let b = "this is b";
</code></pre>

こうなる。
var a =  1;
let b = "this is b";

起動スクリプトはコードハイライトが必要な記事でだけ実行しても良いが、CSS とスクリプトの定義と一緒にガジェットに保存してしまっても良い。私はまとめてガジェットへ保存してしまった。

スタイルを変えたい場合は、「highlight.js demo」のページで、好きなスタイルを選び、


CSS の URL の「default」の部分を書き換える。
例えば「Xcode」スタイルにしたい場合、これを
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.3.0/styles/default.min.css">

こうする。
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.3.0/styles/xcode.min.css">

という訳で今回、設定したガジェットはこんなカンジ。
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.3.0/styles/xcode.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.3.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

Mac からの UDP 8612 ブロードキャスト

別のマシンで作業中に気が付いたんだけど、Mac が UDP 8612 宛のブロードキャストを垂れ流していた。

調べた所「CIJScannerRegister」という、LAN 内のスキャナや、プリンタを自動検出してくれるサービスらしい。
特に要らないサービスなので止めたかったのだが、どうもその方法が無いらしく、かなりネットをさまよった。

結局、削除するしかないらしい。
$ killall CIJScannerRegister
$ cd /Library/Image\ Capture/Support/LegacyDeviceDiscoveryHelpers/CIJScannerRegister.app/Contents/MacOS/
$ sudo rm CIJScannerRegister
「CIJScannerRegister」のプロセスを止めてから、本体を削除。
乱暴だが、仕方がない。

なんでサービス止められる様にしてないんだよ Apple …。

2016年4月16日土曜日

LibreOffice のインストールでハマる

Libre Officeをダウンロードし、インストール。
日本語言語パックもインストールし、起動してみたら…。

「Libre Office は壊れているため、起動出来ません。」

などと怒られた…。
意味が全く解らないので、web で情報収集した結果、
  1. Libre Office をインストール
  2. Libre Office を起動
  3. Libre Office を終了
  4. 言語パックをインストール
とすれば良いとのこと。
上記の通りにやってみた所、問題無く起動できた。
が、意味が解らんバグだなぁ…。

Xcode のビルド出力先



Xcode でビルドした際、出力先が解らなかったのでメモ。

デフォルト設定では「/Users/(ユーザー名)/Library/Developer/Xcode/DerivedData/(プロジェクト名 + 謎の文字列)」に出力されるみたい。

「Xcode」->「Preferences」->「Locations」->「Derived Data」が「Default」になっているので、これを「Relative」に変更すると、「(プロジェクトフォルダー)/DerivedData/」に出力されるようになる。

Git との兼ね合いもあるが、個人的に開発を行っている場合は、この方が便利な気がする。

2016年4月15日金曜日

Xcode で行番号表示



簡単な事だけど、忘れそうなのでメモ。

「Xcode」->「Preferences」->「Text Editing」->「Show: Line Numbers」にチェックを付ける。

2016年4月14日木曜日

Xcode 2

前回はラベル 1個貼っただけだったので、今回はボタン。
特にイベントハンドラの書き方、と言うか定義の仕方というか、紐付けの仕方が訳が分らなかったのでメモ。
あと、プロジェクト名が思いっきり typo ってたのでやり直し。

それと、シミュレータを起動した時に「プロセスにアタッチできません」等といったメッセージが出てしまうので、予め「システム環境設定」->「セキュリティとプライバシー」->「アクセシビリティ」に「Xcode」を追加しておくこと。

では、いってみよう。

「File」->「New」->「Project」をクリックし、プロジェクトを新規作成する。
「Choose a template for your new project」で「Single View Application」を選択し「Next」をクリック。


「Choose options for your new project」で「Product Name」等を設定し「Next」をクリック。


保存先を聞かれるので適当な場所を選択し「Create」をクリック。
この時「Source Control」にチェックを付け、「Create Git repository on」は「My Mac」にしておき、ローカルリポジトリを作成する。


「Project navigator」で「Main.storyboard」を選択する。


「Object library」から「Button」をドラッグし、「View」へドロップする。


「Attributes inspector」で「Title」の文字列を変更する。


ボタンを選択し「Align」をクリック、「Add new Alignment Constraints」の「Horizontally in Container」と「Vertically in Container」にチェックを付け、「Add 2 constraints」をクリックする。


「Resolve Auto Layout Issues」の「Updates Constraints」をクリックし、レイアウトを更新する。



「Show the Assistant editor」の「Assistant Editors on Bottom」をクリックする。



「Assistant Editor」の「Manual」を「Automatic」へ変更する。
これで表示中のオブジェクトのコードが自動的に表示される。



「Connections Inspector」を開き、「Sent Events」の「Touch Up Inside」右側の「○」をドラッグし、「Assistant Editor」に表示されているコード中の適当な場所へドロップする。
もしくは、ボタンオブジェクト上で右クリックしても同じ事が行える。


イベントの名前を入力し「Connect」をクリックする。
「ButtonExitTouchUpInside」とした。


イベントのコードに「exit(1)」を追加し、押されたらアプリを終了する様にする。
ここで、「File」->「Save」で保存。


「Set the active Scheme」で「iPhone 5s」を選択し、「Build and then run the current scheme」でシミュレータを実行。


「Exit」ボタンをタップすれば、アプリが終了し、ホーム画面が表示される。


「Source Control」->「Commit」で、編集したファイルにコメントを付け、ローカルリポジトリにコミットして終了。


とまあ、イベントハンドラの追加まではなんとか出来た。
イベントハンドラの追加の仕方が独特過ぎて、最初はかなり混乱したが、まさかのドラッグ & ドロップ…。
まあ、解ってしまえば簡単なんだが、けっして直感的じゃないよなぁ…。

2016年4月13日水曜日

Mac のスクリーンショットの保存先

スクリーンショットを撮る機会が多いのだが、デスクトップでは使いにくいので、保存先を変更する。

例によって、SystemUIServer に設定を加え、再起動させる。
$ defaults write com.apple.screencapture location ~/Pictures/Screenshots
$ killall SystemUIServer

元に戻すには、上記設定を削除し、同じく再起動すれば OK。
$ defaults delete com.apple.screencapture location
$ killall SystemUIServer

2016年4月11日月曜日

Apple Developer Program 未加入者が出来ない事

ここ数日 Apple の「アプリケーションの配布に関するガイド」を読んでるんだが、非常に解りにくい…。

そんな中でも、無料の Apple ID と、Apple Developer Program 加入者との違いがリスト化されていたので、まとめておく。
以前にも触れたが、Apple Developer Program 未加入でも、実機でアプリを動作させる事が可能となっている。
ただし、これには制限が付き、一部の機能は利用できない。
「じゃあ何が利用できないの?」って話。

以下、「アプリケーションの配布に関するガイド」の P.258「サポートされるケイパビリティ」より抜粋。
  • 「Apple Pay」: Apple が提供するモバイル決済サービスへの対応。
  • 「Associated Domains」: アプリとドメインの関連付け?
  • 「Game Center」: iOS の Game Center への対応。
  • 「iCloud」: Apple が提供するクラウドサービスへの対応。
  • 「In-App Purchase」: アプリ内決済への対応
  • 「個人向け VPN」: よく解らん。アプリから VPN に繋ぐって事か?
  • 「Push Notification」: プッシュ通知機能への対応。
  • 「Wallet」: クレジットカードやデビットカードを使用する決済サービスへの対応。

うん、これからアプリを作り始めるぞっ、って人達が、いきなりこれらの機能は必要、って事は少ないんじゃないだろうか。

結論を言うと、Apple Developer Program への加入は、アプリの配布準備に入る段階で良いと思う。

っていうか、「ケイパビリティ」みたいに、英語をカタカナにしただけの単語で溢れかえってんだよなぁ、このドキュメント…。
読み進めるのが辛くて辛くて…。

2016年4月9日土曜日

Mac のスクリーンショット

Mac スクリーンショットを撮る方法のまとめ。
  1. 画面全体のスクリーンショットを撮る場合は、「command + shift + 3」。
  2. 画面の一部のスクリーンショットを撮る場合は、「command + shift + 4」で撮影モード。 マウスポインタが十字ポインタになるので、撮影する範囲を指定する。
  3. ウインドウのスクリーンショットを撮る場合は、「command + shift + 4」で撮影モードに入った後、「スペース」でマウスポインタをカメラポインタに変え、撮影するウインドウを選択選択する。
    ※ウィンドウ選択時に「option」を押しながらだと、影付きの枠が付かない。
前回、3 の方法を行おうとするも、option キーが VNC 経由で送れず、影無しのスクリーンショット撮影を断念した訳だ。

結局その後も、option キー問題をどうにかしようと色々調べたり、試したりしてみたが、未だ解決に至っていない。

という訳で、別の方法でごまかす事にした。
一時的に設定を変更し、スクリーンショットの影を無くしてしまう方法だ。
SystemUIServer に設定を加え、再起動させる。
$ defaults write com.apple.screencapture disable-shadow -boolean true
$ killall SystemUIServer

元に戻すには、上記設定を削除し、同じく再起動すれば OK。
$ defaults delete com.apple.screencapture disable-shadow
$ killall SystemUIServer

VNC で option キーが送れない

Mac でウィンドウのスクリーンショットを撮ると、ウィンドウの周りに影を表示する枠が付く。これが邪魔になってきたので調べた。

ウィンドウのスクリーンショットを撮るには、「command + shift + 4」を押下し、マウスカーソルが範囲選択用の十字型になったらスペースキーを押下。これでマウスカーソルがカメラ型になるので、撮りたいウィンドウをクリックする。
これが通常の、枠が付いてしまう撮り方。

カメラ型カーソルになった後、撮りたいウィンドウをクリックする時に、option キーを押しながらクリックすると枠無しで撮れる。

が、ここで今まで見ないふりをしてきた問題が顕在化する。

現在の環境は、Mac の画面共有に対し、Windows 機から VCN ビューワで接続し、キーボード、およびマウスの操作内容を送信している状態だ。
Windows キーボードを直接 Mac に接続した場合は、Windows キーボードの Ctrl キー、Windows キー、Alt キーのそれぞれが、Mac の Contorl キー、optionキー、commandキーへと割り当てられる。
ところが、VNC 越しだと Windows キー、Alt キーのどちらも、command キーに割り当てられてしまい、option キーが押せないのである。

もちろん、VNC クライアントも疑い、何種類か試したが改善せず。
Windows キーボードが繋がった Linux 機から接続しても同じ症状なので、これはサーバー側の問題である可能性が高い。

Mac のキー割り当てを変更出来るアプリ Seil(旧 PCKeyboardHack)も試してみたが、ダメだった。
これらのアプリは、物理キーが押されたイベントと、その時に入力されるキャラクタの対応付けを変更するモノの様で、VNC 接続の様にキャラクタを送信しているであろうソフトには効かないのだ。

ググッてみても、日本語、英語ともにこの問題の報告は散見するが、解決策に辿り着く事は無かった。
VNC クライアント側のキーマッピングが変更出来れば、解決しそうではある…。

2016年4月8日金曜日

Blogger の背景透過画像

画像をベタベタ貼りまくりなのだが、背景透過部分が黒く表示されていたので調整。

「テンプレート」->「カスタマイズ」->「上級者向け」->「画像」で、設定エリアを開き、色を変更する。
「背景色」をテンプレートの背景色と合わせる。
「枠線」の色もテンプレートの背景色と合わせる。
「ブログに適用」ボタンをクリックすれば OK。

Mac でスクリーンショットを撮ると自動的に付く、影付きの背景がいよいよ邪魔だな…。

2016年4月7日木曜日

Xcode 1

開発環境 Xcode を App Store からインストール。

しようとするも、いっこうにインストールが進まない。
例によってデカイのだ。
容量を確認すると 4GB 超え。
そのまま放置。

翌日の朝、確認してみるとダウンロードが終わっていたので、インストール開始。
インストール自体はすんなり済んだ。

試してみる。
「Create a new Xcode Project」をクリックし、プロジェクトを新規作成する。


「Single View Application」を選択し、「Next」をクリック。


いろいろと入力して「Next」をクリック。
  • Product Name: プロジェクト名。
  • Organization Name: 自分の名前や組織の名前。
  • Organization Identifier: 自分の名前や組織の識別子。他の開発者と重複しない名称が推奨されるらしい。
  • Language: 今回は Swift。
  • Devices: 今回は iPhone。
  • Use Core Data: 今回は OFF。アプリ内データーベースらしい。
  • Include Unit Tests: ON。
  • Include UI Tests: ON。
※プロジェクト名が思いっきり typo ってる。正しくは「HelloWorld」だな…。


プロジェクトの保存先を聞かれるので、適当なフォルダを選んで「Create」をクリック。
プロジェクト名でフォルダが作られる。
  • Source Control: Create Git repository on XXX: ON。「My Mac」でローカルリポジトリって事かな?


プロジェクトが開かれたところ。


"Main.storyboard"を開く。


ツールバー右下の「Show the Object library」クリックし、オブジェクトの一覧を表示。
オブジェクトの一覧から「Label」を選び、画面中央の「View」へ貼り付ける。
ツールバー右上の「Show the Attributes Inspector」をクリックし、オブジェクトの属性を表示。
ラベルのテキストを「Hello World!」にする。
ラベルの貼り付け位置、幅なんかを適当に調整。
左上の対象機器から「iPhone 5s」等、好きな機器を選択し、実行開始ボタンをクリック。


「Developer Mode」を有効にして良いか確認されるので、「Enable」をクリックし有効化。
なんか、他プロセス(ここではシミュレータ)をトレースしたりする機能なんだそうだ。


途中、管理者権限のユーザ、パスワードを聞かれたりするので入力。



シミュレータが起動し、


「Hello World!」が表示されれば完成。