アーカイブ ‘ 2012年 8月

Mountain Lion にしよう! あれっ? Leopard? まだ間に合う?

知り合いが、プレインストールのままの Mac mini (Leopard)があるので、今回OSをアップグレードしたいということだった。ところが、結論からいうとMoutain Lionはおろか、Snow Leopardにすらアップグレードできない。順をおってまとめるとこんな具合。

  • Mountain Lion
    Mac mini が Mid 2007 製造モデルのためMountain Lion 動作非対応機種であった。Mac miniの動作対応機種は Early 2009から。ちなみにiMacならMid 2007から対応している。よってインストールできない。
  • Lion
    では一世代前だけどLionにするか、と思ったけどMac App Storeが唯一の販売チャネルであったLionはすでにストア上では Mountain Lion に置き換えられてダウンロード不可! Appleは新しいOSの販売開始と同時に旧OSは販売終了するのだが、MAS上でもこれは同じだった。(Snow Leopardは、Mac App Store接続に必要であったため、Lion発売後も引き続き販売されていた。)
  • Snow Leopard
    ではせめて Snow Leopard と思いきや、これもApple Storeからパッケージが消えていた。

つまり、正規の方法ではもうアップグレードする方法がない! じゃぁどうするんだ?

  1. 店頭在庫やオークションで Snow Leopard を探す。
  2. この際、Mac 自体を買い替える。Mid 2007 Mac Mini はLinuxで使用。
  3. Mac Developerになる。

そんなところなんでしょうか? それでもSnowLeopardのセキュリティアップデートなどはそんなに長くは提供されないだろうから、寿命は短いだろうなぁ。デスクトップはまだいいとして、サーバーは困るなぁ。

[追記]
その後、調べてみるとApple Store コールセンターで、まだLionを入手できる方法が残っているようだ。

販売終了した OS X 10.7 Lion を買う方法

早速電話してみると、確かにLionを購入することができるとのこと、ただしLeopardからは直接アップグレードできないので、Snow Leopardが必要とのことだが、こちらも購入可能とのこと。いつまで購入できるのかは定かでないらしい。

[さらに追記]
2012.9.8まだ上記方法で、Snow Leopard購入できました。

[さらにさらに追加]
2012.11.22なんとApple Store にSnow leopardのパッケージが復活しています。

http://store.apple.com/jp/product/MC573J/A/mac-os-x-10.6-snow-leopard

よっぽど問い合わせが多かったんでしょうね。実はこのブログもこの記事にヒットしてお越しになる方がとても多いのです。

ただし、Lionは復活していない模様です。ですので、Mountain Lionの入らないMacはSnow leopardまでしかいけませんね。コールセンターの対応はわからないので、電話する価値はありそうです。アップルとしてはめずらしい対応です。

Twitter API ルール変更 どうなる?

楽チン ツイートと喜んでいるのもつかの間、ここのところTwitter APIのルールが変更されたということで話題になっている。まだよく理解できていないのが正直なとこだが、個人的に気になったのは、

  1. 全てのAPIで認証が必要
  2. 1時間当りのAPIアクセス数が60回に制限
  3. ディスプレイガイドラインに準拠が必要
  4. 基本は10万ユーザー以上に使用してもらえない

というところかな。

私のMacアプリケーション「MeNews」では、タイムラインの取得とSearch APIによるツイートの取得のふたつをやっている。従来、Search APIは認証の必要がなかったので、気軽に結果だけを取得していた。たぶんこれが、1.に引っかかることになるんだろう。ただタイムライン取得ですでにOAuth認証ができているので改変はそう問題ではないと思う。しかし2.の60回の制限にかかるとなると、この部分すこし考えなくてはならない。

3.のディスプレイガイドラインというのが具体的にどんなものかよくわからないのだが、取得したツイートの表示方法を限定されるような内容であると根本的な見直しが必要になりそう。

4.は、残念ながらとても相手にしてもらえるような数字ではないのだが、ほとんどの人が公式のアプリを使っているのだろうから、共栄していけばいいのではと思うのだが。もともととても開かれたAPIだったのだから。

しかし、iOSやMacの楽チン系のframeworkの場合このルールとはどのように影響するのだろう? きっと、作成したアプリはすべてiOS か OSX のTwitter Integrationからのアクセスということになると思うのだけど...

もうすこし調べてみたい。

Mac OSでも楽チン ツイート その2 Social.framework

アプリケーションからとにかく簡単にツイートしたい時は、前出のNSSharingServiceを使うのが最も簡単な方法の用だが、タイムラインを取得したり、よりカスタマイズをしたいという場合は、10.8より追加された、Social.frameworkのSLRequestを使用するのが良さそうだ。このクラスは使い勝手としては、iOS5から搭載されたTwitter.frameworkのTWRequestにそっくりで、こちらも非常に楽チンだ。

では、まずはFrameworksに”Social.framework”とAccounts.frameworkを追加する。次にヘッダをそれぞれインポート<Social/Social.h><Accounts/Accounts.h>。以上で準備完了。

つぎにツイートをするにはこんな感じ。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    ACAccountStore *accountStore = [[ACAccountStore alloc]init];
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    [accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
        if(granted){
            NSArray *accounts = [accountStore accountsWithAccountType:accountType];

            if (accounts != nil && [accounts count] != 0) {
                ACAccount *twAccount = [accounts objectAtIndex:0];
                NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"];
                NSDictionary *params = [NSDictionary dictionaryWithObject:@"Hello" forKey:@"status"];
                SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:url parameters:params];
                request.account = twAccount;
                [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                    NSString *output = [NSString stringWithFormat:@"HTTP response status: %ld",[urlResponse statusCode]];
                    NSLog(@"%@", output);
                }];
            }
        }
    }];
}

このようにiOSのTWRequestとほぼ同じ。既にシステムに登録済のアカウントを取得して、それを使ってツイートする。このようにTwitter本家で認証した後にツイートする従来の手法に比べ認証を手前で用意する必要がない分、飛躍的に楽チンができる。

次にタイムラインを取得してみる。

続きを読む

Mac OSでも楽チン ツイート その1 NSSharingService

iOS5では既に実現されている楽チン ツイートが10.8よりMac OSでも可能になった。

ざっくり分けると

  • NSSharingService
  • Social.framework

かと思われる。前者はSafari6の共有ボタンに見られるツイート機能と同じく、最も簡単にアプリケーションからツイートすることができる。ツイートのみでなくタイムライン取得やカスタマイズがしたい場合は後者を使うことになりそうだ。

まずは、NSSharingService。

NSSharingServiceDelegateプロトコルを追加して、

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
	NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNamePostOnTwitter];
	service.delegate = self;
	[service performWithItems:[NSArray arrayWithObject:@"hello"]];
}

これだけ。実行すると次が表示される。

びっくりするほどシンプル。
ただし、事前に [システム環境設定 > インターネットとワイヤレス > メール/連絡先/カレンダー]でツイッターアカウントを登録しておく必要がある。もし、していなくてもアカウントの追加に導いてくれるのでこれまた楽チン。

もちろんツイッター以外の共有サービスも使用可能。Facebookは秋頃に追加されるらしい。

さらに、NSSharingServicePickerを使用するとまるっきり共有ボタンができてしまう。
これも、NSSharingServicePickerDelegateプロトコルを追加して、
適当なNSButtonを配置し下記アクションを接続する。

- (IBAction)twAction:(id)sender {
	NSSharingServicePicker *picker = [[NSSharingServicePicker alloc]initWithItems:[NSArray arrayWithObject:@"Hello"]];
	picker.delegate = self;
	[picker showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinXEdge];
}

またまた、これだけ。次のように共有ボタンが作成できた。


以上の2つだけで、イメージなどを含むツイートなども作成できるようだ。

iOS3と3G すでに懐かしい

iPhone 3Gを使っていた頃、iOS4にするとそれはもうストレスの塊になるほどモッサリ動作になってしまった。なので、マルチタスクもフォルダも羨ましく横目に見ながら意地で3.1.3のまま使い続けていた。そんなこともあって、作成したiPhoneアプリは3.1.3から動作をするように作っている。今回、私の初リリースアプリ、「誰ナン?」(なぜかiPhoneでできない連絡先の電話番号検索アプリ)に若干機能を加えてAppStoreにアップしようとしたのだが、実機テスト(iOS3.1.3 & iPhone 3G)を使用とすると動かない! コンソールを見ると、下記のようなエラーが起こっていた。

dyld: Symbol not found: __NSConcreteGlobalBlock

他のOSでは問題ないのでどうやらiOS3上だけのエラーのようだ。早速、調べてみるとこれもまたズバリを書いておられる方がいました。

libSystem.B.dylibってなんだろう

早速、対処をして無事動くようになった。記事を書いておられる方、ありがとうございます。

しかし、既にiOSは5.1となり既に6も見えているような状況。いつまで対象に含めるかと考えるが、既にリリース済みのアプリについてはできるだけ対応したいと思っている。

Xcode4.4, iOS SDK 5.1

ところで、iPhone 3Gの日本国内発売はたしか北京オリンピックの年だったかな? 4年でえらい進歩しますなぁ。

return top