ラベル Xcode の投稿を表示しています。 すべての投稿を表示
ラベル Xcode の投稿を表示しています。 すべての投稿を表示

2016年3月24日木曜日

ついにObjective-Cでジェネリクス(テンプレート)が使えるようになったどー!

Xcode7.3から?Objective-Cでもジェネリクス(テンプレート)が使えるようになりました。

サンプル

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSMutableArray<NSString *> *names = [NSMutableArray array];
[names addObject:@"aa"];
NSLog(@"%@", names);

}



このエントリーをはてなブックマークに追加

2015年4月26日日曜日

Xcode6.3+swiftでInstallation Failed Invalid argumentが出たときにやったこと



あ、どうも、swift環境に悪戦苦闘している管理人です。
Xcode6.3+swiftの環境でInstallation Failed Invalid argumentが出てシミュレーターにインストールができないという現象に悩まされたのですが、原因は

Resources

という名前のフォルダーをプロジェクトに追加しているからでした。グループ名にResourcesを使っている場合は問題ありません。メニューのAdd Files toからResourcesという名前のフォルダを選択して追加するとInstallation Failed Invalid argumentが発生しました。
フォルダー名前を変更してXcodeを再起動すれば解決しました。


このエントリーをはてなブックマークに追加

2014年9月27日土曜日

Xcodeでテストがfailedですぐに終了してしまう現象が発生した時に行ったこと


まず、下記のようなエラーログが出力されていないだろうか?
テストはiOS7.0以上でなければエラーで即終了してしまうのだ。



このエントリーをはてなブックマークに追加

2014年5月1日木曜日

Xcodeでビルド時に「No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).」というエラーが出た時に行ったこと。

仕様変更対応で久しぶりにビルドしたら
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
ってエラーが発生してしまいました。
このエラーを修正するために次のことを行いました。


  1. ビルド対象のSchemeをチェックする
  2. Build SettingsのValid ArchitecturesにSchemeに対応したArchitectureが存在するか確認する。
  3. ビルド対象のSchemeが64-bit指定であるにも関わらずValid Architecturesにarm64が無かったので追加

[図解]

このエントリーをはてなブックマークに追加

2014年3月11日火曜日

Xcodeプロジェクトファイルを起動したら白い画面になったりして正常に起動出来ない時に行ったこと

Xcodeのプロジェクトファイルをダブルクリックで開こうとしても正常に起動されず下記のような症状になった場合の対象法です。

  • ソースファイルが開かれてしまう。
  • 白い画面になってしまう。

[対処方法]
  1. プロジェクトファイルのパッケージ内容を表示する。
  2. project.xcworkspaceを削除する。
  3. プロジェクトファイルを開く。


1.プロジェクトファイルのパッケージ内容を表示する
 プロジェクトファイルを右クリック後[パッケージの内容を]を選択します。


2.project.xcworkspaceを削除する
 project.xcworkspaceを右クリック後[ゴミ箱へ入れる]を選択します。
「Command + delete」でも削除できます。



3.プロジェクトファイルを開く


このエントリーをはてなブックマークに追加

2013年12月15日日曜日

コードを自動整形できるPlugin、XAlignをXcode5.xにインストールする

XalignというXcodeのPluginをXcode5.xにインストール方法を紹介します。
XalignはXcodeのエディタ上で範囲選択したコードを整形してくれるPluginです。
※この方法はXcodeのバージョンアップに伴いアンインストールされる場合があります。

[手順概要]

  1. Pluginをダウンロード
  2. インストール
  3. Xcodeを再起動


1.Pluginをダウンロード
 1.1.Plugin配布元からXAlign.tar.gzをダウンロードします。

2.インストール
 2.1.ダウンロードしたXAlign.tar.gzを解凍するとXAlign.xcpluginが出来上がります。
 2.2.~/Library/Application Support/Developer/Shared/Xcode/Plug-insへXAlign.xcpluginをコピーします。フォルダーが存在しない場合は作成する必要が有ります。


3.Xcodeを再起動
 3.1.Xcodeを再起動したらEditメニューにXAlignが追加されていることを確認します。



このエントリーをはてなブックマークに追加

2013年5月3日金曜日

ARCを使わないObjective-Cのメモリ管理はこうすればリークも不正落ちも怖くない

Objective-Cはガベージコレクションを搭載していないので、メモリ管理が結構たいへんですがルールを決めてしまえばそんなに大変ではなくなるので楽してメモリ管理する方法をまとめてみました。

[前提条件]

  1. xcode4.5以上を使用する。

[ポイント概要]

  1. プロパティ記述時の属性(retain assign copy)を使い分ける
  2. alloc時にはautoreleaseを記述する
  3. 自クラス内のインスタンス変数へアクセスする時はプロパティを使用する
  4. retain、copy属性のプロパティはdealloc内でnilを代入する

[ポイント詳細]


ポイント1:プロパティの記述時の属性(retain assign copy)を使い分ける

ヘッダーファイルのクラス宣言内に記述するプロパティの属性を正しく使い分けます。

  1. object型はretainを指定する
  2. NSString型はcopyを指定する
  3. プリミティブ型はassignを指定する
  4. delegateはassignを指定する

※Objective-Cで使用できる主なプリミティブ型
short (signed short)
unsigned short
int (signed int)
unsigned int
float
double
char
BOOL

ポイント2:alloc時にはautoreleaseを記述する

オブジェクトをallocしたら必ずautoreleaseを記述します。


ポイント3:自クラス内のインスタンス変数へアクセスする時はプロパティを使用する

プロパティを使用しない場合、メモリリークや解放済みのオブジェクトへのアクセスが発生する可能性が高くなります。


ポイント4:retain、copy属性のプロパティはdeallocないでnilを代入する

retain、copy属性が指定されたプロパティはdeallocでnilを代入しないとメモリリークが発生してしまいます。


◎autoreleaseを記述しない方がいい場合

例外としてループ(for、while)内でオブジェクトを生成する場合はメモリ節約の観点からautoreleaseを使用しない方が良いでしょう。

このエントリーをはてなブックマークに追加

2013年4月7日日曜日

XcodeのCommand Line Toolプロジェクトで実行時に引数を渡す方法


[手順]

  1. menuからEdit Schemeを選択する
  2. Runを選択する
  3. Argumentsを選択する
  4. +をクリックして引数を追加する

[手順画像]


引数を渡す手順のスクリーンショット


このエントリーをはてなブックマークに追加

XcodeでのC言語(Command Line Tool)開発時にリソースファイルを追加する方法

XcodeのCommand Line Toolプロジェクトを使ってC言語の勉強をしてみたのですが、iPhone開発とは違ってリソースを追加しても実行ファイルがあるディレクトリに勝手にコピーはしてくれないようです。
今回は、コピーされるようにする方法を紹介します

[手順]

  1. リソースファイル(画像ファイル、csvファイル、など)をプロジェクトに追加する。どこに追加してもかまいません。
  2. ソースツリーからプロジェクト情報(xcodeproj)を選択する。
  3. TARGETSを選択する。
  4. Build Phasesを選択する
  5. Add Build Phaseを選択する
  6. Add Copy Filesを選択する
  7. 追加されたCopy Filesの+ボタンをクリックしてリソースを追加する

[手順画像]


このエントリーをはてなブックマークに追加

2013年1月25日金曜日

xcodeのストーリーボード(storyboard)で初期値設定を独自に追加する

ストーリーボードのattributes inspectorに表示されないプロパティやUIViewを継承して追加した独自のプロパティ等をストーリーボードから初期値設定したい場合は
identity inspectorUser Defined Runtime Attributes
に追加することで設定出来ます。
例)UIViewのexclusiveTouchを初期値YESに設定する


このエントリーをはてなブックマークに追加

2012年12月21日金曜日

Could not launch No such file or directory

xcodeで
「Could not launch No such file or directory 。。。」
ってエラーが出てアプリが起動しなくなってしまった時に行ったこと。

  1. xcodeの再起動
  2. アプリ削除
  3. クリーンビルド


このエントリーをはてなブックマークに追加

2012年11月12日月曜日

unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

xcode4.5以降でUITableViewのdelegateメソッドが自動生成されると、このエラーが出る場合があります。
原因は

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{]
内に自動生成されたコードに
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

が記述されているからです。
このメソッドはiOS6.0以降でないと使用できません。
なのでiOS6.0未満も対応しているアプリではエラーとなってしまいます。

◎解決方法
従来の
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; 
を使用するだけで解決します。

このエントリーをはてなブックマークに追加

2012年11月8日木曜日

xcodeプロジェクトをgitで管理する際に無視させるディレクトリとファイル


.DS_Store
*.xcodeproj/*.mode1v3
*.xcodeproj/*.pbxuser
*.xcodeproj/*.xcworkspace
*.xcodeproj/xcuserdata/
*.xcworkspace/xcuserdata/
build/
.svn/
*.swp
*.nib
Thumbs.db
*.[oa]
*~
*.bak





◎無視させるようにする手順

  1. ターミナルを起動する
  2. $git config --global core.excludesfile $HOME/.gitexclude
  3. .gitexcludeファイルに無視するディレクトリやファイルを記述する

※上記の方法で無視させた場合、環境依存になってしまう(MAC毎に設定が変わってしまう)為、プロジェクト毎に.gitignoreを配置するのが良いでしょう

このエントリーをはてなブックマークに追加

2012年10月1日月曜日

'hoge.js' of type sourcecode.javascript for architecture i386ってwarnigを消したい

xcodeではAdd filesで.jsファイルを追加した場合にCompile Sourcesに追加されてしまい、「jsファイルのコンパイル方法がわかりません」と表題のワーニングが出てしまいます。
このワーニングを消す手順を紹介します。

  1. Compile Sourcesから.jsファイルを削除する
  2. Copy Bundle Resourcsに.jsファイルを追加する。
1.Compile Sourcesから.jsファイルを削除する



2.Copy Bundle Resourcsに.jsファイルを追加する。

このエントリーをはてなブックマークに追加

2012年6月13日水曜日

squirrel関連リンク集

http://www.squirrel-lang.org/
http://ja.wikipedia.org/wiki/Squirrel
http://wikiwiki.jp/lua/?Squirrel
http://monsho.blog63.fc2.com/?q=squirrel&page=1
このエントリーをはてなブックマークに追加

2012年5月14日月曜日

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.

特定のデバイス+特定のアプリだけ表題の警告が出て実機に転送できないという現象が発生しました。
いつものようにgoogle先生に聞いてみたのですがいろいろな原因があるようですね。
最終的に解決したのですが。根本的な原因は不明なままです。

◎対処内容
  1. デバイスのProvisioning Profileをすべて削除する。
  2. デベロッパー登録更新後に作成したProvisioning ProfilesのDevicesにて当該デバイスにチェックが入っていなかったのでチェック。
  3. 修正したProvisioning Profileをダウンロード。
  4. Organizerで当該デバイスのProvisioning ProfilesにダウンロードしたProvisioning Profileを追加する(ドラッグアンドドロップではなく下の+addで追加)
今回はこれで解決しました。まぁProvisioning Profileの対象デバイスにチェックが入っていなかったのが原因だと思われます。
このエントリーをはてなブックマークに追加

2012年5月8日火曜日

Instance method '-resizedImage:' not found (return type defaults to 'id')

「Instance method '-resizedImage:' not found (return type defaults to 'id')」って警告がでました。メソッドが見つからないと言っているようです。-resizedImage:が宣言されている.hファイルを#importすることで解決しました、めでたし、めでたし。
このエントリーをはてなブックマークに追加

2012年4月29日日曜日

is missing from working copyっていう警告がでちゃった

xcodeの警告で
warning: Missing file:/job/hoge/trunk/hoge/Classes/Generic/UI/UICustom/NSCViewVisitor.h is missing from working copy 
こんなのがでて消すのにほんのり苦労しました。
どうやらSVNの警告のようで下記コマンドを実行することで解決しました。 その他:SVN管理されているフォルダーをコピーする際はフォルダー内のSVN情報もコピーされてしまいます。
このエントリーをはてなブックマークに追加

2012年2月10日金曜日

Apple Push Notification Serviceで気をつける事あれこれ

Appl Push Notification Service(APNS)の実装で結構はまったのでメモっとく

①全般

  1. リモート通知はシュミレータではサポートされていないので実機転送する必要がある。
  2. プロヴィジョニングプロファイルに含めるApp IDのBundle Identifierにワイルドカード(*)は使用出来ない。
  3. 作成したApp IDのConfigureでDevelopment Push SSL CertificateをEnabledにする必要がある。
  4. App IDを作成後、作成されたAppIDを選択しEditボタンを押したら、Push Notifications の Development SSL Certificate の Create certificateボタンをおしてcertificateする必要があります。
  5.  認証局に証明書を要求する際に「鍵ペア情報を指定」にチェックを入れておく。
  6. 「アプリケーションの有効な"aps-environment"エンタイトルメント文字列が見つかりません」ってエラーが発生したら使用しているプロビジョニングプロファイルでApple Push Notification serviceが扱えないってこと。
  7. Info.plistのBundle identifierはApp IDで指定した文字列に書き換える必要がある。
  8. Releaseモードでビルドする。
  9. APNSへの接続先urlは開発用(ssl://gateway.sandbox.push.apple.com:2195)とリリース用(ssl://gateway.push.apple.com:2195)がある。
  10. OKボタンのみ表示したい場合の例)'alert' => array('body' => 'aaa', 'action-loc-key' => '')
  11. デバイストークンは変更される可能性があるのでキャッシュしてプロバイダに渡してはいけません。常に、デバイストークンは必要になったときにその都度システムから取得します。by「LocalNotificationおよびPush Notificationプログラミングガイド」キャッシュはOSが勝手にやってます。
  12. 検証が不十分ではあるが設定にて「通知のスタイル:なし」「Appアイコンバッジ表示:OFF」「サウンド:OFF」の状態で
    registerForRemoteNotificationTypesの応答を受信することができずアプリがフリーズする現象が確認されている。iOS7 + iPad mini retina

②パスワード不要のPEMファイルの作り方

予めaps.p12を作成しておく
$ openssl pkcs12 -clcerts -nokeys -in aps.p12 -out aps_cert.pem
$ openssl pkcs12 -nocerts -in aps.p12 -out aps_key.pem
$ openssl rsa -in aps_key.pem -out aps_key_noenc.pem
$ cat aps_cert.pem aps_key_noenc.pem > aps_dev.pem

Xcode 5 完全攻略にもっと簡単な方法が記述されています。



③ios8.0からデバイストークンの取得方法がかわりました。



④デバイストークンは16進数の文字列を使う。以下デバイストークンをNSDataから16進数文字列に変換するコード例






⑤クライアントがpush通知を受け取る状態は大きく分けて3パターン

    ◎クライアントがフォアグラウンドで実行されている場合。
  1. application:didReceiveRemoteNotification:が呼び出される。
  2. application.applicationStateの値はUIApplicationStateActive
    ◎クライアントがバックグラウンドで起動されている場合にpush通知からクライアントを起動した場合。

  1. application:didReceiveRemoteNotification:が呼び出される。
  2. application.applicationStateの値はUIApplicationStateInactive
    ◎クライアントが起動されていない場合にpush通知からクライアントを起動した場合。
  1. application:didFinishLaunchingWithOptions:が呼び出される。
  2. NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];でデータを受け取ることができる。

⑥アプリ内に情報が通知される、されない


1.アプリフォアグラウンド
通知される


2.アプリバックグラウンド
閉じる:通知されない
表示:通知される
OK:通知されない


3.アプリ未起動
閉じる:通知されない
表示:通知される
OK:通知されない


4.アプリフォアグラウンド+スリープ
OKボタンでない配置:通知される
OK:通知されない


5.アプリバックグラウンド+スリープ
OKボタンでない配置:アプリがフォアグラウンドへ遷移し通知される
OK:通知されない


6.アプリ未起動+スリープ
OKボタンでない配置:アプリが起動され通知される
OK:通知されない





    このエントリーをはてなブックマークに追加