2011/12/17

iOS App VersionUp手順

iOS App VersionUp手順

1.iTunesConnectでバージョンの数字上げ、バージョンアップの説明を追加
2.StatusがWaiting For Upload状態になることを確認
3.Xcode上でInfo.plistのBundle Version をバージョンアップのバージョンにする。
4.Code IdentifierでDistributionを選択、iOS Deviceを選択し Distributionでビルド、
5.Archive作成








6.Organizerを開きArchivesでさきほどアーカイブしたものを
  Validateして問題がなければ、Submitを押してUploadし、
  StatusがSubmittedになれば完了
7.iTunesConnect側でStatusがWaiting For Reviewに変わり、Appleからの連絡を待つ

2011/11/29

UITableViewを横スクロールしてみる




















こんな感じにtwitterのアイコンを横スクロールできるようにしてみた。


 // テーブルを逆時計回りに90度回転させる
    self.tableView.transform = CGAffineTransformMakeRotation(-M_PI / 2);
 //セパレートなし
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.tableView setBackgroundColor:[UIColor blackColor]];


 /*セル設定側にもセルを時計回りに90度回転させる*/
 cell.contentView.transform = CGAffineTransformMakeRotation(M_PI / 2);

2011/11/15

Getting started with the SplitViewController on the iPad



O'ReillyのElisabeth RobsonさんによるiPad,splitViewcontroller
を使った簡単なRSSアプリのちゅーとりある

■要約
・ArticlesクラスにXMLフィードの解析、記事のカウントなど
・MasterViewControllerクラスにArticleクラスでとってきた記事タイトルをtableに表示
・DetailViewControllerクラスにwebViewに選択した記事の表示


※MasterViewController.mでMasterViewControllerからDetailViewControllerに
アクセスできるようにインスタンス変数、プロパティを用意し、実装で下記を
わすれずに

- (void)viewDidLoad
{
 [super viewDidLoad];

    self.detailViewController = 
    (DetailViewController *)
    [[self.splitViewController.viewControllers lastObject] topViewController];
    
    /*splitViewControllerはmasterとdetailプロパティをもち、
     lastObjectはふたつめのdetailを取得,topViewController
     (現在表示中の画面)プロパティを参照することでdetailViewControllerに
     masterはdetailにアクセスできる状態になる
     */
}

このようなチュートリアルがyoutubeで見れるなんて本当にありがたいです。
Thanks a lot!!

2011/11/13

CATransionでレイヤーを消すアニメーション

- (IBAction)anyAcition:(id)sender{
    
    /*Use the select type. 
     suckEffect, spewEffect, genieEffect, unGenieEffect, twist, tubey, swirl, 
     cameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, 
     charminUltra, zoomyIn, and zoomyOut.*/
    
    CATransition *animation = [CATransition animation];

    //アニメーションのタイプ
    animation.type = @"rippleEffect";
    //継続期間
    animation.duration = 0.5f;
    
    drawImage.image = nil;
    //アニメーションを登録
    [self.view.layer addAnimation:animation forKey:@"transitionViewAnimation"];
 [self.view addSubview:drawImage];
    
}




2011/11/11

Getting started with the SplitViewController on the iPad



O'ReillyのElisabeth RobsonさんによるiPad,splitViewcontroller
を使った簡単なRSSアプリのちゅーとりある

■要約
・ArticlesクラスにXMLフィードの解析、記事のカウントなど
・MasterViewControllerクラスにArticleクラスでとってきた記事タイトルをtableに表示
・DetailViewControllerクラスにwebViewに選択した記事の表示


※MasterViewController.mでMasterViewControllerからDetailViewControllerに
アクセスできるようにインスタンス変数、プロパティを用意し、実装で下記を
わすれずに

- (void)viewDidLoad
{
 [super viewDidLoad];

    self.detailViewController = 
    (DetailViewController *)
    [[self.splitViewController.viewControllers lastObject] topViewController];
    
    /*splitViewControllerはmasterとdetailプロパティをもち、
     lastObjectはふたつめのdetailを取得,topViewController
     (現在表示中の画面)プロパティを参照することでdetailViewControllerに
     masterはdetailにアクセスできる状態になる
     */
}

このようなチュートリアルがyoutubeで見れるなんて本当にありがたいです。
Thanks a lot!!

2011/11/10

DetailViewControllerにwebViewの追加

選択したセルのリンク先を遷移先のdetailViewControllerのwebViewに表示
detailViewController.hにUIWebViewの変数宣言とIBOutletを忘れずに

@implementation MasterViewController

- (void) tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailVC = 
    [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
    
    CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
    UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:webFrame];
    uiWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
    uiWebView.scalesPageToFit = YES;
    [uiWebView loadRequest:[NSURLRequest requestWithURL:
                            [NSURL URLWithString:[linkArray objectAtIndex:indexPath.row]]]];

    [detailVC.view addSubview:uiWebView];
    [self.navigationController pushViewController:detailVC animated:YES];
//safariでweb表示
//    [[UIApplication sharedApplication]
//    openURL:[NSURL URLWithString:[linkArray objectAtIndex:indexPath.row]]];

}

2011/11/08

Master-Detail Applicationの遷移

iOS5標準テンプレートMaster-Detailのmasterのセルを選択した時のメソッド

-(void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
      DetailViewController *detailVC = 
      [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];

      [self.navigationController pushViewController:detailVC animated:YES];
      detailVC.detailDescriptionLabel.text =
      [NSString stringWithFormat:@"This is a Row %d", (indexPath.row + 1)];
}

2011/02/25

Tips for Xcode 1.0 リリースのお知らせ



ついにAppストアに初アプリが掲載されました。
XcodeのTipsを集めたリファレンスアプリです。

リンクはこちら↓


以下Description


Tips for Xcode is xcode reference for iPhone.
It would be greatly appreciated if it could be useful for all iOS App Developers.
No internet connection is needed.

now adjusted for 3.2.5 Xcode


Contact:
@mansony_jp

2011/02/01

BloggerでSexyBookmark導入

Sexy Social Bookmark
ソーシャル系のサービスを使っている海外の人なら知っている有名なアイコンたち。
deliciousは廃止されるので、かなりの今更感は否めませんが、、
あとAddThisとかぶりますが動きがいいのでよしとしましょう。
digg,technorati,reddit,designfloatあたりは使ったことありません。
とにかく動きがセクシーでいいです。


今回はBloggerでの導入方法を書いていきます。

*参考にしたリンク



HTMLの編集でウィジェットのテンプレートを展開にチェックを入れ、
以下を探す。

]]></b:skin>

]]></b:skin>以下にCSSコードを挿入
<style type='text/css'>
div.sexy-bookmarks {
height:54px;
background:url('http://YOUR-IMAGE-HOSTING/sharingsexy.png') no-repeat left bottom;
position:relative;
width:540px;
}

div.sexy-bookmarks span.sexy-rightside {
width:17px;
height:54px;
background:url('http://YOUR-IMAGE-HOSTING/sharingsexy.png') no-repeat right bottom;
position:absolute;
right:-17px;
}

div.sexy-bookmarks ul.socials {
margin:0 !important;
padding:0 !important;
position:absolute;
bottom:0;
left:10px;
}

div.sexy-bookmarks ul.socials li {
display:inline-block !important;
float:left !important;
list-style-type:none !important;
margin:0 !important;
height:29px !important;
width:48px !important;
cursor:pointer !important;
padding:0 !important;
}

div.sexy-bookmarks ul.socials a {
display:block !important;
width:48px !important;
height:29px !important;
font-size:0 !important;
color:transparent !important;

}

.sexy-furl, .sexy-furl:hover, .sexy-digg, .sexy-digg:hover, .sexy-reddit, .sexy-reddit:hover, .sexy-stumble, .sexy-stumble:hover, .sexy-delicious, .sexy-delicious:hover, .sexy-yahoo, .sexy-yahoo:hover, .sexy-blinklist, .sexy-blinklist:hover, .sexy-technorati, .sexy-technorati:hover, .sexy-facebook, .sexy-facebook:hover, .sexy-twitter, .sexy-twitter:hover, .sexy-myspace, .sexy-myspace:hover, .sexy-mixx, .sexy-mixx:hover, .sexy-script-style, .sexy-script-style:hover, .sexy-designfloat, .sexy-designfloat:hover, .sexy-syndicate, .sexy-syndicate:hover, .sexy-email, .sexy-email:hover {
background:url('http://YOUR-IMAGE-HOSTING/sexysprite.png') no-repeat !important;
}

.sexy-furl {
background-position:-300px top !important;
}
.sexy-furl:hover {
background-position:-300px bottom !important;
}
.sexy-digg {
background-position:-500px top !important;
}
.sexy-digg:hover {
background-position:-500px bottom !important;
}
.sexy-reddit {
background-position:-100px top !important;
}
.sexy-reddit:hover {
background-position:-100px bottom !important;
}
.sexy-stumble {
background-position:-50px top !important;
}
.sexy-stumble:hover {
background-position:-50px bottom !important;
}
.sexy-delicious {
background-position:left top !important;
}
.sexy-delicious:hover {
background-position:left bottom !important;
}
.sexy-yahoo {
background-position:-650px top !important;
}
.sexy-yahoo:hover {
background-position:-650px bottom !important;
}
.sexy-blinklist {
background-position:-600px top !important;
}
.sexy-blinklist:hover {
background-position:-600px bottom !important;
}
.sexy-technorati {
background-position:-700px top !important;
}
.sexy-technorati:hover {
background-position:-700px bottom !important;
}
.sexy-myspace {
background-position:-200px top !important;
}
.sexy-myspace:hover {
background-position:-200px bottom !important;
}
.sexy-twitter {
background-position:-350px top !important;
}
.sexy-twitter:hover {
background-position:-350px bottom !important;
}
.sexy-facebook {
background-position:-450px top !important;
}
.sexy-facebook:hover {
background-position:-450px bottom !important;
}
.sexy-mixx {
background-position:-250px top !important;
}
.sexy-mixx:hover {
background-position:-250px bottom !important;
}
.sexy-script-style {
background-position:-400px top !important;
}
.sexy-script-style:hover {
background-position:-400px bottom !important;
}
.sexy-designfloat {
background-position:-550px top !important;
}
.sexy-designfloat:hover {
background-position:-550px bottom !important;
}
.sexy-syndicate {
background-position:-150px top !important;
}
.sexy-syndicate:hover {
background-position:-150px bottom !important;
}
.sexy-email {
background-position:-753px top !important;
}
.sexy-email:hover {
background-position:-753px bottom !important;
}

</style>
上記のYOUR-IMAGE-HOSTING/sexysprite.pngのところをあなたのホスト先に変えてください。

次に以下を探す。
<data:post.body/>


<data:post.body/>以下にHTMLコードを挿入
<div class='sexy-bookmarks'>
<ul class='socials'>
<li class='sexy-delicious'><a expr:href='"http://del.icio.us/post?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-digg'><a expr:href='" http://digg.com/submit?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-technorati'><a expr:href='" http://technorati.com/faves?add=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-reddit'><a expr:href='" http://www.reddit.com/submit?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-stumble'><a expr:href='" http://www.stumbleupon.com/submit?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-designfloat'><a expr:href='"http://www.designfloat.com/submit.php?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-facebook'><a expr:href='" http://www.facebook.com/sharer.php?u=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-twitter'><a expr:href='" http://twitthis.com/twit?url=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-furl'><a expr:href='" http://www.furl.net/storeIt.jsp?u=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

<li class='sexy-syndicate'><a href='http://feeds2.feedburner.com/YOUR-FEEDBURNER-ID' title='Subscribe to RSS'/></li>

<li class='sexy-email'><a expr:href='" mailto:?subject=" + data:post.url + "&title=" + data:post.title' target='_blank'/></li>

</ul>
<span class='sexy-rightside'/></div>

最後にYOUR-FEEDBURNER-IDの所を変える。
これで完成です!

2011/01/22

BloggerでSyntaxHighlighter導入

blogでソースコードを貼りつけたい時に
分かりやすくハイライトしてくれる
SyntaxHighlighterを導入しました。


参考させていただいたリンク
BloggerにおけるSyntaxHighlighterの使い方
「SyntaxHighlighter」各要素ごとの設定項目
Blogger に SyntaxHighlighter 2 をインストールする


まずbloggerのHTMLの編集で<head>内にSyntaxHighlighterのコアjsファイルを導入。
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"/>

次にハイライトしたい言語を選択し挿入。
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCoreDjango.css' rel='stylesheet' type='text/css'/>

最後にSyntaxHighlighterを有効にする処理を挿入。
<script type="text/javascript">
// Bloggerへの埋め込みなら以下の一行は必須です。
SyntaxHighlighter.config.bloggerMode = true;
// クリップボードSWFもホスティングしてもらいましょう。
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
// 論理改行は無効にしておきます。
SyntaxHighlighter.defaults['wrap-lines'] = false;
// 最後にSyntaxHighlighterを有効にします。
SyntaxHighlighter.all();
</script>

これでソースコードをハイライトする準備が終了。
使い方は
<pre class="brush: javascript;">
alert('Hello World!!');
</pre>
このようにpreタグで囲み、
class属性で使用したいbrushを選択するだけ。

html-script
htmlやxmlもハイライトしてくれる。
<pre class="brush: javascript;html-script: true">
SampleCode
</pre>

gutter: false;
行番号の表示、非表示
<pre class="brush: javascript;gutter: false;">
サンプルコード
</pre>


ページ上のハイライトされた要素をデフォルト隠す。
クリックすると開く。↓
<pre class="brush: javascript;collapse: true'">
123456789
</pre>

最後にCSSのテーマ
Defaultだとこれ

最終的にblogのテーマに合わせると
Djangoが一番あってました。

他は
  • Eclipse
  • Emacs
  • FadeToGray
  • Midnight
  • RDark
などがあります。
ぜひお試しあれ♪


2011/01/07

iPhoneアプリ申請の流れ

おおまかな流れをまとめます。
key chain access で何度も証明書要求をし、同じkeyを作り、
uploadできない、もしくはupできてもInvalid Binary
だからダメと言われたりで散々だったので、簡単にまとめます。

開発したiPhoneアプリを実機にインストールしてdeviceでアプリを動かすためにprovisioning profileを取得します。

1, Keychain access で証明書発行するためのcertificateを取得
iOS provisioning portalの左の欄のCertificatesからdevelopmentを選択
→Key Chain Accessで取得したcertificateファイルを選択
→submit
→download 
Key Chain Accessで証明書を確認。
 ※WWDR intermediate certificateも忘れずに!


2,Provisioning Profileの作成

(※deviceの登録、AppIDの作成は割愛。)

iOS provisioning portalのProvisioning
→developmentを選択
→new profileを選択
*Certificates

*App ID

select an App ID

*Devices

それぞれを選択、入力。

downloadしたprovisioningを
xcode organizerの自分のiPhoneのところに追加。
これで実行する時にcode signを作成したprovisioningを選べばOK!!

 3, アプリを申請する際の流れ
iOS provisioning portalの

CertificatesのDistributionを選択

→上記のcertificateファイルをsubmit
 (※ここで注意すべきは,はじめの証明書要求と同じファイルを選択すること。
  CertificateSigningRequest.certSigningRequestという名前のファイル。)
→download 


iOS provisioning portalの

ProvisioningのDistributionを選択

→上記同様
→download
→追加

4,Application LoaderでUp
この前にiTunes Connectにログインして
manage your appsでアプリ登録のその他諸々を設定。
http://gihyo.jp/dev/serial/01/iphone/0010
↑申請する時、この記事('09年3月27日)を読み進めながら
やっていたもんだからApplication Loader??な状態だった。

Finderで/Developer/Application/UtilitiesにApplication Loader発見!
でUpする前にXcodeのcode signでDistributionのを選択。
→buildファイルの削除。
→clean all
→build
→buildファイルのDistribution-iphoneosに.appができているので圧縮。
→.app.zipをApplication Loaderでup。
→これで問題なければ完了。reviewを待ちです。

Finish!!

とその前にManage Your Apps でCurrent Statusを確認。
Invalid Binary状態だとメールが来て、ちゃんとしたファイルを
送りなおさないといけません。waiting for reviewだとかIn reviewは大丈夫。








*最後に
注意すべきポイントを上げます。
device用provisioningを取得する時
証明書を要求のため、自分の名前でkeyを作成しますが、
これをDistributionの時も同じものを使う所です。

今はreview待ちなんですが、これいつまで待たされるんでしょう。
とにかく自分が作ったアプリがApp Storeに載るのが楽しみですね。

2011/01/05

iPhone アプリ申請時に気をつけるべきこと

丸一日かかってiPhoneアプリ申請が完了。
現在、申請したアプリはWating For Review 状態。
今回はiPhoneアプリを申請する際につまづいたエラーなどをまとめていきます。


*証明書取得の際のsubmitができない
まず実機で動作確認するためにprovisioning profileを取得し
iOS Provisioning Portalで証明書を発行しようとしたが、
ファイルを選択→submitしても画面がかわらず失敗。
『Create iOS Development Certificate can't submit』などと検索して
Generate /Submit a CSR - iPhone Dev SDK Forum見つけました。

解決法:
ブラウザをchromeからsafariに変えたらすんなりsubmitできた。これだけ。
provisioning取得で参考にしたページ:第9回デバイスでアプリを動かす:目指せ!iPhoneアプリ開発エキスパートgihyou.jp



*iTunes Connect ログイン失敗。
実機での動きの確認を完了し、
iTunes Connectにログインしようとすると
『Apple ID does not have permission to access iTunes Connect』
正確なIDとパスワードを入力してもダメ。
どうやってもiTunes Connectにログインできない。

解決法:
サポートに連絡。以下内容。
すると半日もしない内に連絡がきて、
ログイン可能に。
Inquiry from  regarding iOS Developer Provisioning Portal
Region: Japan

Hi.

I cant sign in iTunes connect.
Error message is this.

 Apple ID does not have permission to access iTunes Connect.

Please support me.

Apple ID : (あなたのID)
Person ID : (数字何桁かの数字)

Invalid Signature - Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Additionally, make sure the bundle you are uploading was built using a Release target in Xcode, not a Simulator target. If you are certain your code signing settings are correct, choose "Clean All" in Xcode, delete the "build" directory in the Finder, and rebuild your release target.


Info.plistでBundle identifierを正確に入力、
code署名IDもDistribution用のprovisioningを選択し、
Application Loaderでuploadが成功したが後にAppleから
上記のような連絡がきた。

そして、distribution用のprovisioningを発行し直し、
buildをファイルを削除、buildのクリーン→buildをすると
下のようなエラーが


*Command /usr/bin/codesign failed with exit code 1

*CodeSign error: Certificate identity 'iPhone Distribution: (自分の名前) ' appears more than once in the keychain. The codesign tool requires there only be one.



証明書のIDが重複しているということ。
つまりひとつの証明書に二つのkeyがあるので問題になる。
何度もprovisioningを発行してる内に、keyを作りまくっていたw
秘密鍵と正確ではない証明書を同じ名前で作っているとこのように言われる。
解決法:
一番古いkey以外を削除するとコンパイルが通り完了。

CertificateSigningRequest.certSigningRequestという要求ファイルを作るのは一回でいい。
それでdistribution用provisioningもsubmitすれば,keyの重複にはならない。