twitterは通常140文字と文字数を制限しているので、
宣伝活動の一環でURLを表示するとものすごく文字数を取られてしまう
悩みをお持ちの方に必見!
bit.ly
を利用するとURLを短縮できます。
しかも、フリーです。
どんどん使いましょう!
自己紹介
- やす↑↑
- 最近、iphoneアプリをリリースしました。
UxU
無料アプリですので、是非遊んで下さい。 第二弾アプリ:工場夜景写真集 今後も色々なアプリをリリースしていく予定です。
次は、コスプレ or 漫画 or 騎乗日記
2011年3月7日月曜日
2011年3月6日日曜日
twitter連携、facebook連携、Evernote連携などが同時に出来るフレームワーク
iphoneアプリにSNSをまとめて連携出来るフレームワークがある。
それは、ShareKitです。
ただ、このまま取得しても日本語化ファイルが入っていないので、
gitHubに日本語を対応したソースがありますので、
そちらをDLしましょう。
DLして、SHKConfig.hを編集しましょう。
とりあえず、私はtwitterとfacebookとevernoteを利用しているので
そちらだけAPI Keyを取得して設定しました。
twitter API Key 取得ページ
faceBook API Key 取得ページ
evernote API Key 取得ページ
取得後、SHKConfig.hを修正すると、テキストを送信、画像をUPLoadも出来るようになります。
さらに、ログアウト方法も出来ているので、
カスタマイズして、使用することも可能です。
下記に編集箇所を記述しておきます。
□SHKConfig.h
#Evernote
#define kEvernoteUserStoreURL @"https://sandbox.evernote.com/edam/user"
#define kEvernoteNetStoreURLBase @"http://sandbox.evernote.com/edam/note/"
#define SHKEvernoteConsumerKey @"XXX" ← eメールで送られてくる[consumer key]を入力
#define SHKEvernoteSecretKey @"XXXXXX" ← eメールで送られてくる[consumer secret]を入力
#FaceBook
#define SHKFacebookUseSessionProxy NO
#define SHKFacebookKey @"XXXX" ←APIキー
#define SHKFacebookSecret @"XXXX" ←アプリの秘訣
#define SHKFacebookSessionProxyURL @"http://XXX/" ←Privacy Policy URL
#Twitter
#define SHKTwitterConsumerKey @"XXX" ←ConsumerKey
#define SHKTwitterSecret @"XXX" ←Consumer secret
#define SHKTwitterCallbackUrl @"http://XXX/" ←OAuth Callback URL
#define SHKTwitterUseXAuth 0 // To use xAuth, set to 1
#define SHKTwitterUsername @"XXX" ←account
□SHK.m
+ (NSArray *) favoriteShareForType:(SHKShareType)type
//アクションシートの中身を持っている
※クラス名を配列に入れているので、そこを修正する
□SHKShares.plistを編集する。
<key>services</key>
<array>
<string>SHKEvernote</string> <!-- 必要なクラスのみにする。 -->
<string>SHKFaceBook</string>
<string>SHKTwitter</string>
</array>
カスタマイズして自分のプロジェクトへ移植する方法は以下を参照して下さい。
Smart@BLOG (android,iOS): Smart@BLOG (android,iOS): twitter連携、facebook連携、Evernote連携などが同時に出来るフレームワーク パート2
それは、ShareKitです。
ただ、このまま取得しても日本語化ファイルが入っていないので、
gitHubに日本語を対応したソースがありますので、
そちらをDLしましょう。
DLして、SHKConfig.hを編集しましょう。
とりあえず、私はtwitterとfacebookとevernoteを利用しているので
そちらだけAPI Keyを取得して設定しました。
twitter API Key 取得ページ
faceBook API Key 取得ページ
evernote API Key 取得ページ
取得後、SHKConfig.hを修正すると、テキストを送信、画像をUPLoadも出来るようになります。
さらに、ログアウト方法も出来ているので、
カスタマイズして、使用することも可能です。
下記に編集箇所を記述しておきます。
□SHKConfig.h
#Evernote
#define kEvernoteUserStoreURL @"https://sandbox.evernote.com/edam/user"
#define kEvernoteNetStoreURLBase @"http://sandbox.evernote.com/edam/note/"
#define SHKEvernoteConsumerKey @"XXX" ← eメールで送られてくる[consumer key]を入力
#define SHKEvernoteSecretKey @"XXXXXX" ← eメールで送られてくる[consumer secret]を入力
#define SHKFacebookUseSessionProxy NO
#define SHKFacebookKey @"XXXX" ←APIキー
#define SHKFacebookSecret @"XXXX" ←アプリの秘訣
#define SHKFacebookSessionProxyURL @"http://XXX/" ←Privacy Policy URL
#define SHKTwitterConsumerKey @"XXX" ←ConsumerKey
#define SHKTwitterSecret @"XXX" ←Consumer secret
#define SHKTwitterCallbackUrl @"http://XXX/" ←OAuth Callback URL
#define SHKTwitterUseXAuth 0 // To use xAuth, set to 1
#define SHKTwitterUsername @"XXX" ←account
□SHK.m
+ (NSArray *) favoriteShareForType:(SHKShareType)type
//アクションシートの中身を持っている
※クラス名を配列に入れているので、そこを修正する
□SHKShares.plistを編集する。
<key>services</key>
<array>
<string>SHKEvernote</string> <!-- 必要なクラスのみにする。 -->
<string>SHKFaceBook</string>
<string>SHKTwitter</string>
</array>
カスタマイズして自分のプロジェクトへ移植する方法は以下を参照して下さい。
Smart@BLOG (android,iOS): Smart@BLOG (android,iOS): twitter連携、facebook連携、Evernote連携などが同時に出来るフレームワーク パート2
2011年3月4日金曜日
米国 スマートフォンシェア1位Android OS 但し・・・
米調査会社ニールセンが3/3に発表した米国のスマートフォンユーザーを調査した結果では、
Android OSが29%として、RIMのBlackBerry(27%)を抜いて首位に立ったようです。
ただし、Androidの内訳を見るとHTC:12%,モトローラ:10%, サムソン:5%のようです。
会社別だとRIMとAppleが同率で27%で一位となります。
さらにさらに、このデータには、ベライゾン・ワイヤレスから登場したiphoneの台数がまだ、
入っていないのではないだろうか?
ベライゾン次第では、Appleが一位に踊り出るような気がします。
元ソース
Android OSが29%として、RIMのBlackBerry(27%)を抜いて首位に立ったようです。
ただし、Androidの内訳を見るとHTC:12%,モトローラ:10%, サムソン:5%のようです。
会社別だとRIMとAppleが同率で27%で一位となります。
さらにさらに、このデータには、ベライゾン・ワイヤレスから登場したiphoneの台数がまだ、
入っていないのではないだろうか?
ベライゾン次第では、Appleが一位に踊り出るような気がします。
元ソース
国内Android端末のアップデート予定(まとめ)
【Objective-c】 ポインタって何?
■ポインタとは?
変数のアドレスを持っている変数です。
アドレスって何?という話しになると思いますが、
メモリ内の住所です。
メモリって?という話しになるので、
「PCの記憶する領域に対する格納先を示すもの」です。
◎重要:
----------
配列を引数にできないというC言語のルールです。
よって、Objective-cでも同様です。
【利用シーン1】:配列を引数とする場合
--------------------------------
@interface MyClass
{
int _doubleDigits[10];
}
@property(readonly) int *doubleDigits;
@end
@implementation MyClass
- (int *)doubleDigits
{
return _doubleDigits;
}
@end
【利用シーン2】:クラスを定義する場合
-------------------------------------
CLLocationManager *locMgr = [[[CLLocationManager alloc] init]retain];
■ポインタのポインタとは?
ポインタ変数も独自のアドレスを持つ変数です。
いまいち、理解できないですよね。
クラスはポインタで定義しますよね。
それは、メモリ内のどこを参照すれば良いのかをPCに教える為です。
(正確に言うと、クラスをポインタで定義しない方法もありますが・・・
それを今話すとややこしいので割愛します)
関数の引数にポインタのポインタでクラスの変数を渡す場合、
関数内での値設定を受け取る事ができます。
【利用シーン1】:(参照渡し)関数内での値の設定を受け取りたい場合
------------------------------------------------
関数側:
+(void)setMessageElement:(TBXMLElement *)element toMessage:(Message**)aMsg
{
[*aMsg setTest:[TBXML textForElement:test]];
}
呼び出し側:
Message* msg = [[Message alloc] init];
[self setMessageElement:msgsElement toMessage:&msg];
◎重要:
----------
このようにポインタを引数にすれば、関数内での値の変更を受け取れます。
つまり、関数を呼び出す側にしてみれば「この変数に値を設定してくれ」と要求していることになります。
ライブラリを見る際に、引数に**があれば、「結果が格納される」と見れば良いわけです。
objective-cを網羅的に一回は調べた方が良いです。
これから、objective-cをやるなら下記の本は必読です。

アドレスって何?という話しになると思いますが、
メモリ内の住所です。
メモリって?という話しになるので、
「PCの記憶する領域に対する格納先を示すもの」です。
◎重要:
----------
配列を引数にできないというC言語のルールです。
よって、Objective-cでも同様です。
【利用シーン1】:配列を引数とする場合
--------------------------------
@interface MyClass
{
int _doubleDigits[10];
}
@property(readonly) int *doubleDigits;
@end
@implementation MyClass
- (int *)doubleDigits
{
return _doubleDigits;
}
@end
【利用シーン2】:クラスを定義する場合
-------------------------------------
CLLocationManager *locMgr = [[[CLLocationManager alloc] init]retain];
■ポインタのポインタとは?
ポインタ変数も独自のアドレスを持つ変数です。
いまいち、理解できないですよね。
クラスはポインタで定義しますよね。
それは、メモリ内のどこを参照すれば良いのかをPCに教える為です。
(正確に言うと、クラスをポインタで定義しない方法もありますが・・・
それを今話すとややこしいので割愛します)
関数の引数にポインタのポインタでクラスの変数を渡す場合、
関数内での値設定を受け取る事ができます。
【利用シーン1】:(参照渡し)関数内での値の設定を受け取りたい場合
------------------------------------------------
関数側:
+(void)setMessageElement:(TBXMLElement *)element toMessage:(Message**)aMsg
{
[*aMsg setTest:[TBXML textForElement:test]];
}
呼び出し側:
Message* msg = [[Message alloc] init];
[self setMessageElement:msgsElement toMessage:&msg];
◎重要:
----------
このようにポインタを引数にすれば、関数内での値の変更を受け取れます。
つまり、関数を呼び出す側にしてみれば「この変数に値を設定してくれ」と要求していることになります。
ライブラリを見る際に、引数に**があれば、「結果が格納される」と見れば良いわけです。
objective-cを網羅的に一回は調べた方が良いです。
これから、objective-cをやるなら下記の本は必読です。
2011年3月3日木曜日
今回のMacBookProに搭載された「Thunderbolt」(サンダーボルト)とは?
Thunderbolt Technologyだが、IntelとAppleが共同開発したものとされ、
最大10Gbpsのデータ転送速度(片側、双方向だと20Gbps)を持つ高速I/O技術である。
これだけ、聞くとよくわからないので、比較を入れます。
USB3.0が最大5GbpsでUSB2.0の10倍速いと言われております。
ということは、USB2.0(480Mbps)の約20倍速い(20.8・・・・倍)と言うことですね。
NASや外付けHDDに対応されると[Time Machine]が恐ろしく速く終わりそうですね。
で、サードパーティの状況ですが・・・
USB3.0に関しては、製品がそろってきました。
バッファロー
Thunderboltに関しては、何も記載されておらず・・・これからという状況です。
バッファローかIO DATAにはいち早い対応を期待します。
最大10Gbpsのデータ転送速度(片側、双方向だと20Gbps)を持つ高速I/O技術である。
これだけ、聞くとよくわからないので、比較を入れます。
USB3.0が最大5GbpsでUSB2.0の10倍速いと言われております。
ということは、USB2.0(480Mbps)の約20倍速い(20.8・・・・倍)と言うことですね。
NASや外付けHDDに対応されると[Time Machine]が恐ろしく速く終わりそうですね。
で、サードパーティの状況ですが・・・
USB3.0に関しては、製品がそろってきました。
バッファロー
Thunderboltに関しては、何も記載されておらず・・・これからという状況です。
バッファローかIO DATAにはいち早い対応を期待します。
2011年3月2日水曜日
iphoneアプリでバージョンアップ時にだけ、アラート表示してitunestoreへ自動的に遷移する方法
アプリをリリースしていくと色々と不具合や機能UPする事があります。
そんな時、itunestoreのアップデートのお知らせ機能以外に
アプリ内からアップデートをするように促す方法を以下にまとめます。



上記のように、アラートを表示してOKボタンを押下すると、ituneStoreへ遷移します。

Google App Engine でバージョン管理するテーブルを作成します。
1.GQLで降順でデータを一番目だけ取得します。
http://xxx.appspot.com/xxx/rest/page_size=1&ordering=-ver
2. XMLを取得します
TBXMLで取得してます。
例)XMLデータ
<versiontables>
<version>1.4</version>
<comment>データ取得スピード****</comment>
</versiontables>
TBXMLElement* versionsElement = [TBXML childElementNamed:@"versionTables" parentElement:element];
while(versionsElement != nil)
{
// 取得したいエレメントを入れる
TBXMLElement* version = [TBXML childElementNamed:@"vertion" parentElement:versionsElement];
if(version != nil)
{
[*aVersion setVer:[[TBXML textForElement:version] floatValue]];
}
TBXMLElement* content = [TBXML childElementNamed:@"comment" parentElement:versionsElement];
if(content != nil)
{
[*aVersion setContent:[TBXML textForElement:content]];
}
// find the next sibling element
versionsElement = [TBXML nextSiblingNamed:@"versionTables" searchFromElement:versionsElement];
}
3. plistのバージョンと比較して、最新バージョンがあればアラート表示
if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]self
cancelButtonTitle:nil
otherButtonTitles:@"OK",nil];
[alertView show];
[alertView release];
}
4. itunestoreへ遷移します。
NSString* urlString = [NSString stringWithString:@"http://itunes.com/apps/アプリ名"];
NSURL* url= [NSURL URLWithString:urlString];
[[UIApplication sharedApplication] openURL:url];
このやり方で行えば、plistからバージョン取得とituneに飛ばす所をandroid用に変えれば
サーバ側は、何も変更せず対応が可能です。
android版とiphone版をそれぞれのバージョンを管理する場合、カラムを[oskind]というようなものを用意して、対応することも可能でしょう!
※android でバージョン情報取得方法
Android.os.Buildを使うと、機器固有の情報を取り扱うことができます。
そんな時、itunestoreのアップデートのお知らせ機能以外に
アプリ内からアップデートをするように促す方法を以下にまとめます。



上記のように、アラートを表示してOKボタンを押下すると、ituneStoreへ遷移します。

Google App Engine でバージョン管理するテーブルを作成します。
1.GQLで降順でデータを一番目だけ取得します。
http://xxx.appspot.com/xxx/rest/page_size=1&ordering=-ver
2. XMLを取得します
TBXMLで取得してます。
例)XMLデータ
<versiontables>
<version>1.4</version>
<comment>データ取得スピード****</comment>
</versiontables>
TBXMLElement* versionsElement = [TBXML childElementNamed:@"versionTables" parentElement:element];
while(versionsElement != nil)
{
// 取得したいエレメントを入れる
TBXMLElement* version = [TBXML childElementNamed:@"vertion" parentElement:versionsElement];
if(version != nil)
{
[*aVersion setVer:[[TBXML textForElement:version] floatValue]];
}
TBXMLElement* content = [TBXML childElementNamed:@"comment" parentElement:versionsElement];
if(content != nil)
{
[*aVersion setContent:[TBXML textForElement:content]];
}
// find the next sibling element
versionsElement = [TBXML nextSiblingNamed:@"versionTables" searchFromElement:versionsElement];
}
3. plistのバージョンと比較して、最新バージョンがあればアラート表示
if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]
cancelButtonTitle:nil
otherButtonTitles:@"OK",nil];
[alertView show];
[alertView release];
}
4. itunestoreへ遷移します。
NSString* urlString = [NSString stringWithString:@"http://itunes.com/apps/アプリ名"];
NSURL* url= [NSURL URLWithString:urlString];
[[UIApplication sharedApplication] openURL:url];
このやり方で行えば、plistからバージョン取得とituneに飛ばす所をandroid用に変えれば
サーバ側は、何も変更せず対応が可能です。
android版とiphone版をそれぞれのバージョンを管理する場合、カラムを[oskind]というようなものを用意して、対応することも可能でしょう!
※android でバージョン情報取得方法
Build.VERSION.RELEASE
・・・ユーザーに表示するバージョン番号
登録:
投稿 (Atom)