El CapitanのSSL問題、Keychainもフリーズする場合の対処法

Mac OSXをEl CapitanにしたらChromeでTwitterなどが開けない

App Storeも開けないし、なんかCPUが過剰に動いているし、困りました。

VeriSignのSSL証明書が原因

似たような症状の人は多く、以下の記事に概ねの解決方法が示されています。

ようは、VeriSignが悪いんですね。

Keychain Accessが固まる

上記の解決法に倣って操作しようとすると、Keychain Accessがフリーズします。
フリーズする条件は、ログインキーチェーンの以下の項目を選択した時です:

  • VeriSign Class 3 Public Primary Certification Authority - G3
  • VeriSign Class 3 Public Primary Certification Authority - G5

これらの証明書が悪さをしているのは、もう明らかですね。

ターミナルから証明書の削除を試みる

Keychain Accessで削除できないんじゃ、お手上げだ!!という方、あきらめないでください。

間違っても、Mac – El capitanにアップデートしてCPU使用率がやばくなった時の対応法 – Qiita で示されているようにキーチェーンをリセットするなんて方法はとらないでください。

CLIから削除を試みます。
まずはログインキーチェーンから、VeriSignの証明書を探します:

$ security find-certificate -c Veris
keychain: "/Users/***/Library/Keychains/login.keychain"
class: 0x80001000
attributes:
    "alis"<blob>="VeriSign Class 3 Public Primary Certification Authority - G3"
    "cenc"<uint32>=0x00000003
    "ctyp"<uint32>=0x00000001
    "hpky"<blob>=0xF0115C20ABF0D0FE3D0842EF9571E372C11C1256  "36021134 253360320376=10B357225q343r3013422V"
    "issu"<blob>=0x305F310B300906035504061302555331173015060355040A130E564552495349474E2C20494E432E31373035060355040B132E434C4153532033205055424C4943205052494D4152592043455254494649434154494F4E20415554484F52495459  "0_1130110603U04062302US1270250603U04122316VERISIGN, INC.17050603U041323.CLASS 3 PUBLIC PRIMARY CERTIFICATION AUTHORITY"
    "labl"<blob>="VeriSign Class 3 Public Primary Certification Authority - G3"
    "skid"<blob>=<NULL>
    "snbr"<blob>=0x4AC9EA088EE6F78CC7A5F9FA39A49396  "J311352102163463672143072453713729244223226"
    "subj"<blob>=0x3081CA310B300906035504061302555331173015060355040A130E564552495349474E2C20494E432E311F301D060355040B1316564552495349474E205452555354204E4554574F524B313A3038060355040B1331284329203139393920564552495349474E2C20494E432E202D20464F5220415554484F52495A454420555345204F4E4C59314530430603550403133C564552495349474E20434C4153532033205055424C4943205052494D4152592043455254494649434154494F4E20415554484F52495459202D204733  "02013121130110603U04062302US1270250603U04122316VERISIGN, INC.1370350603U04132326VERISIGN TRUST NETWORK1:080603U0413231(C) 1999 VERISIGN, INC. - FOR AUTHORIZED USE ONLY1E0C0603U040323<VERISIGN CLASS 3 PUBLIC PRIMARY CERTIFICATION AUTHORITY - G3"

悪い子たちが出てきました。以下のコマンドで、駆逐しましょう。

$ security delete-certificate -c "VeriSign Class 3" <ログインキーチェーンのファイル名>

実行後、何もアウトプットされないので不安になりますね。もう一度実行してみると以下のように表示されます。

$ security delete-certificate -c "VeriSign Class 3" /Users/nora/Library/Keychains/login.keychain
Unable to delete certificate matching "VeriSign Class 3"%

Keychain Accessを開いて、悪さをしていた証明書が削除されていることを確認しましょう。
これで、TwitterなどのVeriSign系SSLサイトが再び開けるようになりました。

インターネットライフを楽しみましょう。

参考

[Mac] 特定のアプリケーションをショートカット一発でアクティブにする方法

同時に沢山のアプリを使っていると切り替えが面倒になる

アプリケーションの切り替えショートカットといえばCommand + Tabですよね。
でも、アプリケーションが最後に使用した順に並ぶので、切り替えるたびに順番が入れ替わってしまいます。
職業柄、複数のブラウザやターミナルを頻繁に交互に切り替えるのですが、切り替えるアプリケーションが3つ以上になると間違えることが多くなります。
さらに、Command + Tabによる切り替え方法は非効率的です。
3つ前のアプリケーションをアクティブにするためには、Commandを押下しながらTabを3回も押さなければなりません。

アプリケーションが3つ以上になった時に起こる混乱と、無駄なキータイピングを改善したい!

アプリケーションごとに固有のショートカットキーを割り当ててアクティブにしたい

切り替えたいアプリケーションは多くて5つ程度です。
なら、それぞれに固有のショートカットキーを割り当てれば全て解決します。
例えば:

  • Chrome: Command + Option + Shift + 1
  • Safari: Command + Option + Shift + 2
  • Calendar: Command + Option + Shift + 3

さっそく、手元のMacを設定してみましょう。

設定手順

Step 1. Automatorでサービスを作成する

Automator_icon

まずは上記アイコンのAutomatorを起動してください。
Command + Nで新規作成します。

automator 1

上記画面が表示されたら、「Service」を選択してください。

Step 2. サービスを No Input, Any application に設定

automator 2

上記画面の右上に注目してください。
Service receives [no input] in [any application] となるように、ドロップダウンリストの項目を選択してください。

Step 3. 起動したいアプリケーションを指定

automator 3

検索欄に launch と打つと、 Launch Applicationという項目が残るはずです。
この項目を、右側のペインにドラッグ&ドロップしてください。
Launch Applicationという項目が追加されたら、その中のドロップダウンリストをクリックして、アプリケーションを選んでください。

できたら、Command + Sで保存します。適当な名前をつけてください。

automator 4

Step 4. System Preferencesでキーを割り当てる

以下の手順で設定画面を開きます:

  • System Preferences → Keyboard → Shortcuts

左側のリストからServicesを選択してください。
その次に、右側のリストを下の方までスクロールしてください。
下記のような画面が表示されるはずです。

system preferences 1

あなたが先ほどAutomationで作成したサービスが表示されているはずです。
それに、ショートカットを割り当てましょう。

Step 5. 動作確認

割り当てたら、さっそくショートカットキーを押してみてください。
もしアプリケーションが起動していなければ、起動します。
すでに起動済みであれば、そのアプリケーションが前面に表示されます。

キーコンビネーションが悩ましい

押しやすいキーコンビネーションは大抵アプリケーションに割り当てられてしまっています。
もし環境設定とアプリケーションのショートカットが重複してしまった場合、現在使用中のアプリケーションのショートカットが優先されるようです。
ですので、重複せず、なおかつ押しやすいコンビネーションが望ましいです。
僕はひとまずCommand + Option + Shift + Numberでやってみようと思います。
もしいいコンビネーションがあれば是非コメントください^^

歴代のMacをアイコンにしたフォントを公式サイトで発見!

30years-mac

今日は、Appleの30周年記念ですね!
Apple公式サイトではトリビュートウェブサイトを立ち上げて、お祝いしています。

実は、このサイトで使われている歴代Macのアイコンは、ウェブフォントと言われるフォントなのです。
これをダウンロードすると、Macにインストールして使う事ができます!

Apple 30years Mac Font

下記からダウンロードできます。今だけ!急げ!

http://images.apple.com//v/30-years/a/fonts/mac-icons/mac-icon-standard.ttf

Core Dataライブラリと便利ツールの紹介

iOSアプリにおいて、Core Dataは永続的で大きなオブジェクトグラフが取り扱えるモデルを提供する。
多くの有名アプリで使われているけど、複雑だしそのまま使おうとすると開発効率が悪い。

Core Dataを置き換えようとするライブラリが多くあるが、さらに多くのライブラリはCore Dataをよりよくしようとするものだ。
それらのライブラリは糖衣構文(シンタックスシュガー)からフルスタックのフレームワークまで幅広い。

本記事では、CoreDataを取り扱うオープンソースのライブラリを紹介する。
あなたのCore Data要件にマッチするものを見つけて下さい。

ライブラリ一覧

ラッパー


Magical Record
Saul
Mora
http://ghbtns.com/github-btn.html?user=magicalpanda&repo=MagicalRecord&type=watch&count=true
Objective-Record Marin
Usalj
http://ghbtns.com/github-btn.html?user=mneorr&repo=Objective-Record&type=watch&count=true
SSDataKit Sam
Soffes
http://ghbtns.com/github-btn.html?user=soffes&repo=SSDataKit&type=watch&count=true
ios-queryable Marty
Dill
http://ghbtns.com/github-btn.html?user=martydill&repo=ios-queryable&type=watch&count=true

ReactiveCoreData
Jacob
Gorban
http://ghbtns.com/github-btn.html?user=apparentsoft&repo=ReactiveCoreData&type=watch&count=true

アダプター

RestKit Blake
Watters
http://ghbtns.com/github-btn.html?user=RestKit&repo=RestKit&type=watch&count=true

AFIncrementalStore
Mattt
Thompson
http://ghbtns.com/github-btn.html?user=AFNetworking&repo=AFIncrementalStore&type=watch&count=true
MMRecord Conrad
Stoll
http://ghbtns.com/github-btn.html?user=mutualmobile&repo=MMRecord&type=watch&count=true

SLRESTfulCoreData
Oliver
Letterer
http://ghbtns.com/github-btn.html?user=OliverLetterer&repo=SLRESTfulCoreData&type=watch&count=true
Overcoat Guillermo
Gonzalez
http://ghbtns.com/github-btn.html?user=gonzalezreal&repo=Overcoat&type=watch&count=true
Mantle GitHub http://ghbtns.com/github-btn.html?user=github&repo=Mantle&type=watch&count=true

シンクロナイザ

TICoreDataSync Tim
Isted
, Michael Fey,
Kevin
Hoctor
, Christian Beer,
Tony
Arnold
, and Danny Greg
http://ghbtns.com/github-btn.html?user=nothirst&repo=TICoreDataSync&type=watch&count=true

UbiquityStoreManager
Maarten
Billemont
http://ghbtns.com/github-btn.html?user=lhunath&repo=UbiquityStoreManager&type=watch&count=true
FireData Jonathan
Younger
http://ghbtns.com/github-btn.html?user=overcommitted&repo=FireData&type=watch&count=true

ユーティリティ

mogenerator Jonathan
‘Wolf’ Rentzsch
http://ghbtns.com/github-btn.html?user=rentzsch&repo=mogenerator&type=watch&count=true

ラッパー

ラッパーライブラリはいくつかの糖衣構文や便利メソッド群を提供するもの。
Core Dataの冗長で複雑なAPIを簡単にしてくれる。

例えば、新しいManaged ObjectをManaged Object Contextに挿入するには、NSManagedObjectでもNSManagedObjectContextのクラスメソッドではなく、NSEntityDescriptionのものを呼び出す必要がある。
それは、NSEntityDescription +insertNewObjectForEntityForName:inManagedObjectContext:だ。
わかりにくい!

Core Dataのこのような分かりにくいAPIをラフにラップするオープンソースのライブラリが沢山存在している。
AppDelegateの外でMainコンテキストとPrivateコンテキストを管理できるものや、クエリの生成を簡単にできるものなどなど。

SSDataKit

Core Dataのアプリケーションを書くのには、多くのボイラープレート(初めに必要なコード)が必要だ。
これはだるい。
SSDataKitはこれを楽にする。

Active Recordにインスパイアされたもの

ある方法論を学んだら、それを別の技術にも適用しようというアイデアは何も驚くものではない。
Active Recordに詳しいRubyプログラマーがiOSアプリの開発に流入した事によって、それは起こった。

Magical Record

MagicalRecordはRuby on RailsのActive Recordの取得方法にインスパイアされたもの。
このコードのゴールは、Core Data関連のコードをクリーンアップし、シンプルで、一行で取得できる、かつ最適化のためにNSFetchRequestを変更できる余地を残す事。

Objective-Record

ライトウェイトにActiveRecord的にCore Dataのオブジェクトを取り扱えるもの。
シンタックスはRuby on Railsに酷似している。
AppDelegateのコードはなし。
Kiwiで完全にテストされたライブラリだ。

LINQにインスパイアされたもの

面白いことに、.Netから来た開発者も、同じように慣れ親しんだパラダイムをiOS開発でも行おうとする。
それは、LINQのパラダイムだ。

LINQはSQLライクだが、言語に統合されたものだ。
NSPredicateNSSortDescriptorのようなキーバリューコーディングは、以下のようにいい感じの構文になる:

from c in SomeCollection
  where c.SomeProperty < 10
  select new {c.SomeProperty, c.OtherProperty};

ios-queryable

ios-queryable supports LINQ-style query composition and deferred execution, and implements a subset of IEnumerable’s methods, including where, take, skip, orderBy, first/firstOrDefault, single/singleOrDefault, count, any, and all.

ReactiveCocoaにインスパイアされたもの

ReactiveCocoa は、Objective-CでFunctional Reactive Programmingのパラダイムを可能にするライブラリ。
それをCore Dataにも使ったものが存在する。

ReactiveCoreData

ReactiveCoreData (RCD)は、ReactiveCocoaの世界にCore Dataを持ち込もうとするもの。

アダプタ

ほとんどのiOSアプリはウェブサービスと通信する。
Core Dataを使うアプリにとって、RESTまたはRPCスタイルのウェブサービスからレコードを取得・更新・削除する事は共通だ。
ローカルのキャッシュとサーバ側との一貫性を保持するのは、トリッキーだ。

オブジェクトを常に最新の状態に保ち、重複を削除して、APIのエンドポイントとエンティティをマップし、衝突を調整し、ネットワーク到達性を管理する…これらは頑健なクラサバ型アプリの作成においてデベロッパが直面するいくつかの問題だ。

幸運な事に、これらの心配を軽減するライブラリが多く存在する。

RestKit

RestKitは、RESTfulなウェブサービスとクライアントを連携させるためのiOSとMac OS Xで動作するモダンなObjective-Cフレームワークだ。
Core Dataとシームレスに統合するオブジェクトマッピングエンジンを提供し、AFNetworking上に構築されたプリミティブなHTTP通信機能群を提供する。
エレガントで入念にデザインされたAPIによって、RESTfulのモデリングは魔法のように簡単になる。

AFIncrementalStore

AFIncrementalStoreはNSIncrementalStoreのサブクラスで、AFNetworkingを使ってプロパティとリレーションシップが必要な時に自動で取得してくれる。

MMRecord

MMRecordはブロックベースでシームレスにウェブサービスと統合できるiOSとMac OS Xで動作するライブラリ。
Core Dataモデルの構成を利用して、APIのレスポンスから自動的にオブジェクトグラフを作成する。
どのネットワークライブラリでも動作するようにできていて、シンプルな導入方法を提供する。

SLRESTfulCoreData

SLRESTfulCoreDataはAFNetworkingSLCoreDataStack上に構築されたもので、JSON REST APIとCore Dataモデルを数分で統合できる。

Overcoat

OvercoatはAFNetworkingの拡張で、デベロッパに簡単にMantleモデルオブジェクトが使えるようにする。

Mantle

MantleはCocoaとCocoa Touchアプリケーションで簡単にモデルレイヤーを記述できるようにする。

シンクロナイザ

アダプターはRESTなどの一般的な用途のインターフェースを通じて情報を同期するのに対して、シンクロナイザはもっと直接的なプロトコルを用いて、よりよい統合性とパフォーマンスを提供する。

TICoreDataSync

MacとiPhone、iPhone同士、iPhoneとiPadなど、デバイス間でCore Dataを自動で同期する。

UbiquityStoreManager

UbiquityStoreManagerはCore DataでiCloud統合を実装するコントローラ。

FireData

FireDataはシームレスにCore DataとFirebaseを統合する。

ユーティリティ

Mogeneratorを紹介しないで、Core Data系ライブラリを紹介しているとは言えないだろう。
MogeneratorはiPhone以前の時代から存在し続けている、Core Dataを使ったアプリケーションの開発において欠く事ができないツールだ。
Core Dataはここ数年で大きく変わったのに、Apple提供のツールは機能性に乏しいままだ。
でも幸運なことに、Wolf Rentzsch氏がカバーしてくれた。

Mogenerator

Mogeneratorはコマンドラインツールで、.xcdatamodelファイルを渡すとエンティティごとに2つのクラスを生成する。
1つめのクラスは_MyEntityで、マシン向けのもので継続的に上書きされ、データモデル設計と同じ状態に保たれる。
2つめのクラスはMyEntityで、_MyEntityのサブクラス。こっちはカスタムなロジックを記述するためのもので、生成以降は上書きされない。

いかがでしたでしょうか。
万能薬は存在しませんが、用途ごとに合ったものを使う事で劇的に開発効率は向上するでしょう。

(翻訳元: Core Data Libraries & Utilities – NSHipster)