Month: December 2016

Swift:Xcodeのチームは ヤバいのでは?

少しわかってきた問題。要は、おかしいのでは?

Xcode(少なくともSourceKitServiceとswiftのふたつはそう)がメモリ食い過ぎ。

症状的には、Firefoxがメモリを食い過ぎていると言ってくるのですが、Xcodeのビルドで40GB近くもメモリを使えば、それは動かなくなるはずです。Xcodeの二重起動を制御できていないのでは?

やれやれ。

screenshot-2016-12-30-06-18-00

Swift:サンプルコード2

サンプルコードの骨格を整備しました。

ソースコードはここにあります。

  • サンプルコードを追加しやすくしました。classにコードを書けるように変更しました。
  • データタイプの調査、多次元配列の作り方とアクセスをサンプルコードとして入れてあります。
  • データタイプの調査から、どのようにデータタイプを判定していけばいいか、このコードを評価用プログラムサンプルとして入れてあります。
  • 実行するサンプルコードは、表の中から選べるようにしました。
  • 表はview basedです。
  • 表はsplit viewに入れてあります。

screenshot-2016-12-28-20-15-19

全体としては、そんなにむずかしいコードは書いていません。ありきたりです。学生さんや初心者の方の役に立てば幸いです。

2年前に作ったサンプルコードを移植すればいいのですが、時間がないので、必要なときに都度追加していきたいと思います。文字列の検索やフィルタリングなど、使うときに必ずつまづきますので、そうすることになると思います。

Swift:サンプルソースコード

サンプルプログラムのメインを作り直しました。

ソースコードはここにあります。

取り急ぎ、データタイプをどう判定すればいいか調査したときのサンプルコードを表示できるようにしました。

主な変更点

  • printでなく、表に結果を示すようにしました。時間が経つと、ソースコードが何なのか知りたいケースがあるからです。
  • 作りはcopy and pasteを間違わないように単純な構成にしました。
  • サンプルコードは機能別の番号を入力すればそれを表に出すという形にすればいいと考えています。今まで通り。未実装。
  • デバッグ中の場合、ボタンRun Exec Main()をクリックすればそのメソッドを実行します。今まで通り。たとえば、黄色のボックスに2を入れると、変数のデータタイプを調べるメソッドのデバッグができます。

追記:データタイプを調べる機能は、Exif仕様に基づきデータを取り出すアプリを作成したとき、実際に格納されているデータがSwiftで定義される変数のように一意的でなく、特定しないとSwiftが落ちる問題を回避するために必要となったものです。実際は、データタイプだけでなく、変数か配列かの識別も必要でした。参考まで。

余談:Xcodeが8.2.1になりました。何となく調子悪いですね。リソースを食ってハング状態になりがちです。iPhoneのミュージックUIもそうですが、最近、Appleのソフトウェアの品質が下がっているのではないかという気がします。7.5.5の悪夢を思い出します。あの頃、Appleは潰れかけていました。そして、半製品が代名詞で、Appleはその程度なのだからビジネスでは使えないが定着していきました。競合各社と横並びのとき、もう少し節制し、慎重にやってほしいものです。

screenshot-2016-12-24-00-26-47

Swift:サンプルプログラム作成中

MesaClipの修正がいい線まで終わったので、すっかり動かなくなったサンプルプログラムを作り直しています。

一段落したのと金曜日ということもあり、やや疲れ気味で、ボーッとしてしまいました。これではまずいと思い直し、余裕があるときにできることをすることにしました。

基本的なSwiftの命令の書き方については気にしていませんが、変数を扱うとき、結果がどうなるかについて厳密に把握しないといけないケースもあるので、すぐにわかるようにするには、どうしたらいいか、考え直しました。

printだと結果が流れていくので、tableViewで検討しています。多分、この方が書き方がスッキリするはずです。パパッと終わればいいのですが。

動くようになったら、途中でも、公開します。

Swift:ユーザーフィルタの機能追加

ユーザーフィルタを登録できるように機能追加することにしました。

コンテンツブロックのフィルタを確認するのに、毎回プログラム修正するとコンパイルに時間がかかるのでユーザフィルタを登録できるようにした方がいいという結論に達しました。

フィルタの解析・配列への登録までは従来ロジックを修正し、ユーザフィルタにも対応できるように修正しました。このあと、import / exportの処理を追加します。

機能追加は終わりました。意外と簡単でした。

メモ:

  • アプリがデフォルトで準備したフィルタにユーザーフィルタを追加する方式とする。
  • ユーザーフィルタは展開後の配列をsave/recoverする。
  • recover時は、アプリフィルタを展開後にユーザーフィルタを展開する。
  • .txtファイルの形式とSwiftプログラムソースでは、制御文字関係が違うので注意を要する。たとえば””は不要だし、当然、\.のような表記をする必要がない。
  • 特定の絵文字の意味は同じ。

Swift:webViewでループする問題

まさにあの手この手です。正確には、あの手この手でやっているのですが、苦労しています。

多分、出口近くに来ているのですが、まだまだ最終確認が必要です。

didStartProvisionalLoadForFrame

  • about:blankでwebページが切り替わるのでこのタイミングで初期化する。こんな基本的な知識の欠如は怖いもの知らずとしか言いようがありません。
  • 前のwebページと次のwebページの間にabout:blankのwebページがあるとき、ここで初期化すれば、前のwebページの読み込み完了を認識しないで先に進んでから初期処理が可能。

このほかに覚えておくべきもの(変数)

  • 現在のURLはクリックか、URL指定による読み込みかを識別するフラグ
  • 同じURLがクリックされた回数(最悪ループしたときのworkaround)
  • 直前と同じwebページか、違うwebページかを識別するフラグ
  • frame.nameとmainFrameURLを覚えておく(配列)

やるべきもこと

  • 変数の初期化の場所と単純化を再チェック

Swift:Xcode 8.2

Xcode 8.2がリリースされました。nilが少し変わったようですね。

取り急ぎ、開発中のアプリは対応しました。基本的な考え方は、(変数?)! = nil!を変数? = nilの形式に変更すればよく、祖先帰りしているように思いました。仕様がふらついていて実装がコロコロ変わっている印象を受けました。私のような初心者には、あまり好ましくありません。

便利にMac:Phots写真をTwitterに投稿

ええ、それができなくなりました。

チョットしたことなのですが、不便です。とりあえず、別アカウントに投稿してリツイートしてみたのですが、どうも・・・。

調べたら簡単なことでした。

System preference→Internet Account→該当するアカウントのTwitterを削除→再登録でうまくいきます。既存のアカウントではPhotosとリンクが取れなくなっていたようです。

screenshot-2016-12-12-22-57-38