iOS

...now browsing by category

 

Xcode 7.1 Build Phase でドラッグ&ドロップが効かない

金曜日, 11月 13th, 2015

Xcode 7.1 にて Build Phase に項目を追加し、適切な位置にドラッグ&ドロップで移動しようとしたのですが、任意の位置に入らず戻ってしまいます。

スクリーンショット 2015-11-13 8.55.54

何度試しても上手くいかず、Xcodeを再起動しても、Macを再起動してもダメ。

同じような問題が起きている人はいないかと探してみたら、いました。

XcodeのRun Scriptのドラッグ&ドロップ移動のしにくさを緩和する

途中に入れるのは出来ませんでしたが、一番下に移動するのはできたので、入れたい位置の下から全ての項目を、一個ずつ最下行に移動することで、対処しました。

この人の場合は「非常に効きにくい」と言っていますが、私の場合、何度やっても成功しませんでした。

なんかコツとかあるんでしょうか?

UniversalアプリでUITableViewのセルの背景がiPadだと透明にならない

木曜日, 10月 1st, 2015

Universalアプリにて、storyboardでUITableViewのセルの背景を透明に設定したのですが、iPhoneだと透明になるのに、iPadだと透明にならず白いままでした。

調べてみたところ、コードにて背景色に透明を設定することで、iPadでも透明になることがわかりました。

let cell = tableView.dequeueReusableCellWithIdentifier("contentCell", forIndexPath: indexPath)

// セルの背景を透明に設定
cell.backgroundColor = UIColor.clearColor()

return cell

iOS7かららしいですが、バグなのか仕様なのか?

【参考】
UITableView / UITableViewCell challenge with transparent background on iPad with iOS7

XcodeでSwiftのリファクタリングができないから、renameの代わりにターミナルのコマンドで一括置換してみた

木曜日, 9月 17th, 2015

Xcode7の正式版が出たというのに、未だにSwiftのリファクタリング機能が実装されていません。特にrenameはよく使うので困りものです。さすがにちまちま置換していくのはとても面倒なので、ターミナルのコマンドで一括置換しました。

find -E . -regex ".*\.(swift|storyboard)" | xargs perl -i -pe 's/\bOldName\b/NewName/g'

これでカレントディレクトリ配下の *.swift ファイルおよび *.storyboard ファイル内の、「OldName」を「NewName」に置換できます。

「.*\.(swift|storyboard)」の部分で対象とするファイルを指定しています。「-E」「-regex」 は拡張正規表現を使うためのオプションで、両方必要なようです。

「OldName」の前後の「\b」は単語の区切りを示します。これがあると「HogeOldName」や「OldNameMoge」などは対象外になります。

最初、perlの代わりにsedを使おうと思っていたのですが、正規表現で「\b」が使えなかったり、バックアップファイルが残ってしまったりするので、perlに変えました。

Frameworkのテストコードで”Library not loaded: @rpath/libswiftCoreAudio.dylib”

木曜日, 8月 27th, 2015

iOSでFrameworkのテストコードを書いたのですが、テストを実行しようとすると、ビルドは成功するのですが、テスト実行時に以下のエラーが出てテストが行われませんでした。

2015-08-27 08:35:04.489 xctest[1176:62057] The test bundle at /Users/who/Library/Developer/Xcode/DerivedData/XxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxxTests.xctest could not be loaded because an unanticipated error occurred.
2015-08-27 08:35:04.490 xctest[1176:62057] Detailed error information: Error Domain=NSCocoaErrorDomain Code=3587 “The bundle “xxxTests” couldn’t be loaded because it is damaged or missing necessary resources.” (dlopen_preflight(/Users/who/Library/Developer/Xcode/DerivedData/XxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxxTests.xctest/xxxTests): Library not loaded: @rpath/libswiftCoreAudio.dylib
Referenced from: /Users/who/Library/Developer/Xcode/DerivedData/XxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxx.framework/xxx
Reason: image not found) UserInfo=0x7f9a39422c50 {NSLocalizedFailureReason=The bundle is damaged or missing necessary resources., NSLocalizedRecoverySuggestion=Try reinstalling the bundle., NSFilePath=/Users/who/Library/Developer/Xcode/DerivedData/XxxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxxTests.xctest/xxxTests, NSDebugDescription=dlopen_preflight(/Users/who/Library/Developer/Xcode/DerivedData/XxxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxxTests.xctest/xxxTests): Library not loaded: @rpath/libswiftCoreAudio.dylib
Referenced from: /Users/who/Library/Developer/Xcode/DerivedData/XxxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxx.framework/xxx
Reason: image not found, NSBundlePath=/Users/who/Library/Developer/Xcode/DerivedData/XxxxFramework-gpqmrnxhtltpenbdidiiwacuonzd/Build/Products/Debug-iphonesimulator/xxxTests.xctest, NSLocalizedDescription=The bundle “xxxTests” couldn’t be loaded because it is damaged or missing necessary resources.}

*** Test session exited(1) without checking in. If you believe this error represents a bug, please attach the log file at /var/folders/nt/x60j01ps3r3dds9ldvppd5xm0000gn/T/com.apple.dt.XCTest-status/Session-2015-08-27_08:35:01-Z4Gt8p.log

  • framework内でAVFoundationにリンクしています。
  • CoreLocationを使用しています。
  • サンプルアプリに組み込んだframeworkは正常に動作していました。

cleanしたり、再起動したりしたのですが、改善しませんでした。色々試した結果、以下のBuild Settingsを変更したところ、正常に動くようになりました。

Embedded Content Contains Swift Code = NO -> YES

ですが、これで動くようになった理由がわかりません。
新しくframeworkを作るとデフォルトでNOになっているのは確認しました。

Xcodeプロジェクトの.gitignore

土曜日, 1月 10th, 2015

色々な案があって迷ったけど、一番自分に合っているのをまとめておく。


# Mac
.DS_Store
*.swp
!.gitkeep

# Xcode
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
*.xcworkspace
!default.xcworkspace
xcuserdata
profile
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# VCSのメタデータが含まれ、コミットしてしまうとmergeが困難になるなどの問題が発生する
# http://stackoverflow.com/questions/18340453/should-xccheckout-files-in-xcode5-be-ignored-under-vcs
*.xccheckout

#CocoaPod
Pods/*

ベースはXcodeでiOSアプリ開発をする時の.gitignoreを使わせてもらった。

Podfile.lockは迷ったけど、Xcode&gitで開発する時の.gitignoreのコメント欄にikesyoさんが書いた以下の文を参考にして、gitで管理する事にした。

lockファイルが存在する場合、そこに書かれているバージョンを参照してダウンロード・インストールするので、複数人の間でバージョンを固定できます。

ライブラリのバージョンアップはpod update(新しいバージョンが利用できる場合、lockファイルも更新されます)、新しいバージョンが出ていないか確認したい場合には pod outdatedを使えばいいですね。

【2015/09/17】
*.xccheckoutを追加