【iOS Swift入門 #215】開発用デバイスで強制的に電源再起動が行われる

【iOS Swift入門 #215】開発用デバイスで強制的に電源再起動が行われる
■はじめに

iPhoneやiPadなどを開発でのデバッグ用に
使用しているデバイスが、ある日から突然、
20分くらいごとに強制的に電源再起動されるようになった。

突然、リンゴマークがでるのだ。

 

以前も同じような状況になり、
そのときは工場出荷時状態にリセットしたら、
問題は発生しなくなった。

 

今回も工場出荷時状態にリセットしなきゃいけないのかなあと思いながら、
いろいろ試していたら、直すことができたのでメモしておく。

 

■推測できる原因

問題はSpotlight検索にあったようだ。

ホーム画面で下にスワイプすると表示されるこの画面です。
swift215_001

 

おそらく、Spotlight検索は素早く検索できるように、
インデックスを作成している!?

 

デバイスを開発で使っているとこのインデックスがおかしくなり、
電源が落とされると思われる。

 

■対応方法

1.設定アプリを起動

swift215_002

 

2.メニュー「一般」を選択
swift215_003

 

3.メニュー「Splotlight検索」を選択
swift215_003

 

4.チェックをすべて外す
swift215_004

 

5.電源再起動する

 

6.「4.チェックをすべて外す」ではずしたチェックを全てチェックする

 

【参考情報】

①iOSアプリ開発未経験の人向け
・iOSアプリ開発をはじめたとき最初に買った書籍
【アプリ作成未経験の人向け】
Storyboardを使って画面を作成していく。
手順にしたがって操作していくと、ボタンの作成やWebViewの作成などができる。
アプリって、こんな感じで作るんだというのを体験できる。

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】 教科書シリーズ

・わかりやすくていい、と聞いた本
立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②を終えたくらいの知識の方向け
・アプリ開発独学中に2冊めに購入した書籍
プログラミング知識はなくても、若干理解するのに時間がかかる程度で、
読み進められるわかりやすさがある。


iPhoneアプリ開発塾

③中級者、上級者向け
詳解 Swift

【楽天ブックス】で見る方は
こちら

③その他
その他もろもろ

【iOS Swift入門 #206】2点間の距離を計算する

【iOS Swift入門 #206】2点間の距離を計算する

CLLocationクラスの

– distanceFromLocation:

を使うと2点間の距離を計算し、メートルで返してくれる。

Swiftでは

func distanceFromLocation(_ location: CLLocation!) -> CLLocationDistance

と定義されている。

 

Objective-Cでは

– (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

と定義されている。

 

ここでは羽田空港から香港ビクトリアピークまでの距離を計算する。

香港ビクトリアピークは百万ドルの夜景を見れるところです。

 

・羽田空港の緯度・経度
緯度:35.549393
経度:139.779839

・香港ビクトリアピークの緯度・経度
緯度:22.2760448
経度:114.1455266

 

やることは2つ。

・CoreLocationをimportする

・距離を計算する処理を追記

※例えば、下記の通り

// 羽田空港のCLLocation
let hanedaLocation = CLLocation(latitude: 35.549393, longitude: 139.779839)

// 香港ビクトリアピークのCLLocation
let peakLocation = CLLocation(latitude: 22.2760448, longitude: 114.1455266)

// 羽田空港から香港ビクトリアピークまでの距離
let distance = hanedaLocation.distanceFromLocation(peakLocation)

 

■サンプル

こちら(github)でダウンロード
swift206_001

おわり。

【iOS Swift入門 #205】位置座標を変換する – convertRect:toView:を調べる

【iOS Swift入門 #205】位置座標を変換する – convertRect:toView:を調べる

– convertRect:toView:はUIViewクラスのメソッドのひとつ。

Swiftでは

func convertRect(_ rect: CGRect, toView view: UIView?) -> CGRect

と定義されている。

Objective-Cでは

– (CGRect)convertRect:(CGRect)rect toView:(UIView *)view

と定義されている。

 

例えば、下記のように記述したとする。

A.convertRect(rect: B, toView: C) -> CGRect

→AのViewの座標空間上でのBのCGRectを
CのViewの座標空間上でのCGRectに変換し、返してくれる
※Cがnilの場合、Windowの座標空間上でのCGRectに変換する

 

下記画面は
ViewControllerのView
–>黄色のView
——>青色のView
という構造になっています。

これをconvertRect:で位置座標を変換します。

画面上に表示されているCGRectを得ることができます。

swift205_001

サンプルソースはこちらでダウンロードを。
※Google Driveにおいてます。

位置座標の変換は画面をアニメーションさせるときに使うことが多いです。

かっこいいアニメーションを作りたいと思ったら、
位置座標をむにゃむにゃすることになります。

基礎からアニメーションを学ぶなら、下記がおすすめ。

【Kindle版】iOSアニメーション専門書籍

英語書籍は読むのに時間がかかりますが、
内容は豊富なことが多く、様々なアニメーションを身につけることができます。

日本語のものでアニメーションを専門としている書籍は見つけられませんでした。

【iOS Swift入門 #199】3Dアニメーションでサイドメニューを表示する

【iOS Swift入門 #199】3Dアニメーションでサイドメニューを表示する

■はじめに

画面をドラッグするとサイドメニューを表示する。 これを3Dのアニメーションで表示するのがかっこいい。 書籍やネットの情報を参考に作った。 完成形は↓です。 サンプルソースはGithubにアップしています。

■実装手順

1. プロジェクトを新規作成

※SideMenu3Dと名づけました。

2. 画面を構成するViewControllerのサブクラスを3ファイル作成する。

それぞれ下記の通り名前をつけました。 swift199_001 ・センター画面 CenterViewControllerというクラス名で作成。 ・サイドメニュー画面 SideMenuViewControllerというクラス名で作成。 ・コンテナ画面 ContainerViewControllerというクラス名で作成。

3. センター画面をStoryboardで編集

①Storyboard上にViewControllerを配置する。

swift199_002

②背景色を変更する

※サイドメニューと区別できるようにするため swift199_003

③Class名とStoryboard IDを設定する

Class名はCenterViewControllerを設定する。 Storyboard IDもCenterViewControllerで設定しました。 swift199_004

4. サイドメニュー画面をStoryboardで編集

①Storyboard上にViewControllerを配置する。

swift199_005

②背景色を変更する

※センター画面と区別できるようにするため swift199_006

③Simulated Sizeを変更する

※Storyboard上の表示を変更するだけです。 後ほど、サイドメニューの横幅はソース内で設定します。 swift199_007 swift199_008

④Class名とStoryboard IDを設定する

Class名はSideMenuViewControllerを設定する。 Storyboard IDもSideMenuViewControllerで設定しました。 swift199_009

5. まずは画面を表示できるところまでソースを書く

①ContainerViewController.swift

 

②AppDelegate.swift

 

③アプリ起動時の画面作成はStoryboardではなく、ソースから行うようにする。

swift199_010

④画面が表示されるか確認

※サイドメニュー画面が表示されるはず swift199_011

6. ドラッグでサイドメニュー画面が3Dアニメーションで表示されるようにする

①ContainerViewController.swiftを下記のようにする

 

7.実行

記事のはじめに載せている動画と同じようになると思います。   もしうまく動かない場合、サンプルソースをGithubにアップしていますので、 こちらを確認ください。

■Macのハードディスク容量が少ない

ハードディスク容量が少ないのをmicro SDカードで補う。 ↓のアダプタに挿す。 小さいので私のパソコンケースでは問題なく入ってます。 iBUFFALO カードリーダー/ライター microSD対応 超コンパクト ブラック 【PlayStation4,PS4 動作確認済】BSCRMSDCBK

■参考書籍

アニメーションの専門書籍。 【Kindle版】iOSアニメーション専門書籍 Programming iOS 8: Dive Deep into Views, View Controllers, and Frameworks

【iOS Swift入門 #198】Gitでproject.pbxprojのコンフリクトするのをなくす

■はじめに

今まで一人でアプリ開発を担当していたのですが、
2人で開発することになりました。

ソースはGitで管理していて、
機能追加や修正が終わるとマージしています。

プロジェクトにファイルを追加したり、
プロジェクト内でのグループの階層構造を変更すると、
project.pbxprojが変更されます。

project.pbxprojが高い確率でコンフリクトします。
コンフリクトを解消しようとファイルを見てもわからないし、
いじって間違えるとプロジェクトを開けなくなるくせものです。

そこでどうすればいいか調べてみたところ、

mergepbx

という自動でproject.pbxprojをマージするツールをみなさん使われているようです。
私も導入してみました。

 

■設定

1.mergepbxを入手する

①https://github.com/simonwagner/mergepbxをcloneする。

git clone https://github.com/simonwagner/mergepbx.git 【cloneするフォルダパス】
※【cloneするフォルダパス】は任意

 

2.mergepbxをビルドする

①cloneしたディレクトリに移動する

cd 【cloneするフォルダパス】

②build.pyを実行する
./build.py

 

3.mergepbxをcopy/move

①mergepbxをコピー

cp mergepbx 【コピー先フォルダパス】
※【コピー先フォルダパス】は任意

 

4. ~/.gitconfigにmergepbx設定を追加する

①~/.gitconfigにmergepbx設定を追加する

git config –global merge.mergepbx.name “Xcode project files merger”
git config –global merge.mergepbx.driver “【コピー先フォルダ】/mergepbx %O %A %B”

※【コピー先フォルダパス】は手順3「3.mergepbxをcopy/move」で指定したフォルダパス

.gitconfigに下記が追記される。

[merge “mergepbx”]
name = Xcode project files merger
driver = 【コピー先フォルダ】/mergepbx %O %A %B

 

5..gitattributesにmergeの設定を追加する

①プロジェクトのリポジトリ直下(.gitファイルがある場所)に.gitattributesファイルを追加
②viなどのエディタで.gitattributesファイルを開き、下記追記する。

*.pbxproj merge=mergepbx

これで設定終了。
ファイル追加で、project.pbxprojがコンフリクトしないようになったか確認してみてください。

 

■おわりに

MacBook Proを購入して1ヶ月ほど。
買ったばかりなのに、もし、キーボードに飲み物とかこぼしたら
どうしようかと不安になり、キーボードカバーを探した。

実際、以前使用していたMacBook Airはカフェオレをこぼし、
一部のキーで、押すとぐにょという感触になってしまったし、
安いキーボードカバーがあれば、購入しておいたほうがいいと思った。

で、amazonで↓を発見。
980円で、評価も高いので、コスパが高そうなので購入しました。


MacBook Air/Pro 日本語 キーボードカバー (JIS配列) 〈 MacBook Air 13/Pro Retina 13,15インチ用〉マックブック ブラック (黒) 【MagicMoshroom】

 

■参考書籍

アニメーションの専門書籍。

【Kindle版】iOSアニメーション専門書籍


Programming iOS 8: Dive Deep into Views, View Controllers, and Frameworks



【参考情報】
①iPhoneアプリ開発が初めての人。XcodeとSwift入門ならここ
絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②中級者、上級者向け
詳解 Swift

【楽天ブックス】で見る方は
こちら

③その他
その他もろもろ

【iOS Swift入門 #197】UIAlertViewのボタンタップの処理をクロージャ(blocks,handler)で書く

【iOS Swift入門 #197】UIAlertViewのボタンタップの処理をクロージャ(blocks,handler)で書く

■はじめに
UIAlertViewはiOS8からdeprecated(非推奨)となり、
UIAlertControllerの利用が推奨されています。

でも、iOS7を対応OSと含めているため、
UIAlertViewを使っている人が多いですね。

で、このUIAlertViewでボタンをタップした時の処理は
delegateメソッドで書きますが、
これを使うとソースが読みにくくなります。

なのでクロージャを使い、↓のようにして、
AlertViewの初期化時にボタンタップ時の処理も合わせて、
書けるようにしました。

[[UIAlertView alloc]initWithTitle:@”たいとる” message:@”メッセージ” cancelButtonTitle:@”キャンセル” okButtonTitles:@”OK” cancelHandler:^{
// キャンセルボタンを押したときの処理
} okHandler:^{
// OKボタンを御した時の処理
}];

■実装
①UIAlertViewのサブクラスを作成
※CustomAlertViewという名前にしました

・CustomAlertView.h

・CustomAlertView.m

②作成したCustomAlertViewを使う
 ※Storyboardにボタンを配置してます。

・UIViewController.h

・UIViewController.m

■実行
1.アプリ起動
swift197_001

2.ボタンタップ
swift197_002

3.OKタップ
→コンソールに出力
swift197_003

4.キャンセルタップ
→コンソールに出力
swift197_004

■Apple Watchのベルト

Apple Watch 38mm 用 時計バンド 交換ベルト 腕時計 本革 時計ベルト高級レザーベルト ブラック

■参考書籍
アニメーションの専門書籍。


Programming iOS 8: Dive Deep into Views, View Controllers, and Frameworks

【参考情報】
①iPhoneアプリ開発が初めての人。XcodeとSwift入門ならここ
絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②中級者、上級者向け
詳解 Swift

【楽天ブックス】で見る方は
こちら

③その他
その他もろもろ

【iOS Swift入門 #140】(画像付き)Xcode6.2・WatchKitがリリースされたので、Apple Watchをエミュレータで動かす

【iOS Swift入門 #140】(画像付き)Xcode6.2・WatchKitがリリースされたので、Apple Watchをエミュレータで動かす



■はじめに
Xcode 6.2から使える。
まだ、Apple Watchは発売されていないが、
エミュレーターで動かすことができる。

詳しくは今後学んでいくとして、とりあえず、
かんたんな文字列を表示できるところまでやってみる。

■手順
1.新規プロジェクトを作成する

2.Xcodeの上部メニューからFile → New → Targetを選択
swift140_001

3.Apple Watch → WatchKit Appを選択し、Nextを押す
swift140_002

4.開いた画面でFinishを押す
swift140_003

5.Activateを押す
swift140_003

6.画面左のところから、WatchKit Appのグループ内「Interface.storybard」を
選択すると右側にWatchKitのStoryboard画面が開く。
swift140_004

7.「Main」と表示されている矢印のとなりの画面にラベルを追加。
swift140_006

8.WatchKit Appのターゲットが選択されていることを確認し、デバッグ実行
swift140_007

9.しばらく待つとエミュレータが起動。追加したラベルが表示されてる
swift140_008

とりあえず、動いた。
この後、どんなアプリをつくろうか。

■おわりに
Apple製品が好きなのでApple Watchは欲しいのだが、
くやしいがこっちのAndroidのほうががかっこいいと思ってしまった。

これ、どこタッチするの?

スマートウォッチ Android Wear

こっちもかっこいい。

Pebble E-Paper Watch for iPhone and Android 【Kickstarterエディション】



【参考情報】
①iPhoneアプリ開発が初めての人。XcodeとSwift入門ならここ
絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②中級者、上級者向け
詳解 Swift

③その他
その他もろもろ

【Yosemiteにしたら問題発生!】CocoaPodを使うとPermissionエラーが発生するようになった

【Yosemiteにしたら問題発生!】CocoaPodを使うとPermissionエラーが発生するようになった

今日、OS X Mavericks(v10.9)からOS X Yosemite(v10.10)にアップデートした。

そして、いつもどおりiOSプログラミングの勉強を開始する。
Cocoapodで追加したAFNetworkingを最新にアップデートしようとする。
しかし、pod updateを実行するとPermissionが許可されていないようで、エラーが発生する。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-14 (Errno::EACCES)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in
fu_mkdir’
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:219:in `block (2 levels) in mkdir_p’

スクリーンショット 2014-10-25 13.26.24

やる気を出して、朝から勉強しようとしたのに、萎える。
1Passwordの最新版が3500円でセール中であったが、
Yosemiteにしないと購入できないので、急いでYosemiteにしてこんな目にあってしまった。

本来であれば、Permissionに問題があるディレクトリ・ファイルを見つけ出し、
解決するのでしょうが、Permissionとかよくわからないので、
小手先の解決方法をネットで探しまわる。

そして、解決に至った。
その解決方法は下記の通り。

1. gemを全て削除?(下記コマンドを実行)
sudo rm -rf /Library/Ruby/Gems/*

2.gemを全て更新(下記コマンドを実行)
sudo gem update –system

3.cocoapodをインストール(下記コマンドを実行)
sudo gem install cocoapods

4.podのセットアップ(下記コマンドを実行)
pod setup

この4つの手順実施後、pod updateしたら、正常に実行できました!

【iOSプログラミング初心者向け】StoryboardでTableViewにRefreshControlを追加【Swift Objective-C】

【iOSプログラミング初心者向け】StoryboardでTableViewにRefreshControlを追加【Swift Objective-C】

iOSプログラミングを勉強し始めたときには、Storyboardが存在し、
入門書ではStoryboardを使ったアプリ作成方法を学んだため、
私はStoryboardで画面作る派です。

しかし、Storyboardでどうやるか少し調べても分からない時には、
ソースを書いて画面を作ってしまいます。

ソースを書いて、作っていた代表的なのがUIRefreshControlです。
動的なものはStoryboardで使いにくいという偏見があったのです。

万が一にも同じような人がいるかもしれないと思い、
Storyboardで作る手順をメモしました。

超簡単です。

サンプルプロジェクト作成からの手順を記載します。

1.試す為のプロジェクトを作成。
File → New → ProjectからMaster-Detail Application

スクリーンショット 2014-10-06 17.52.47

2.Product Nameは下記のとおりにしました。
スクリーンショット 2014-10-06 17.53.19

3.Storyboardを表示。

4.MasterViewController画面のナビゲーションバーとPrototype Cellsと表示された部分にめがけて、Viewを追加。

スクリーンショット_2014-10-06_17_54_14

下記の様になっているはずです。

スクリーンショット_2014-10-06_17_55_36

5.追加したViewを選択してください。

スクリーンショット_2014-10-06_17_55_44

6.ClassにUIRefreshControlと入力しましょう。

スクリーンショット_2014-10-06_17_56_55

これでTableViewにUIRefreshControlを追加完了です。

デバッグ起動し、確認する。

Screen_Shot_2014-10-06_at_18_16_31

あとはソースファイルに接続して、コーディングで作成したときと同様に処理をしてあげればいいだけです。

【Swift Objective-C】文字列からURLを検出し、リンク表示するには?

【Swift Objective-C】文字列からURLを検出し、リンク表示するには?

文字列からURLを検出し、リンク表示するには?

このように表示したい。
Screen Shot 2014-10-01 at 21.46.23

そして、リンクをタップするとSafariに遷移するようにした。
Screen Shot 2014-10-01 at 21.46.29

TTTAttributedLabelを使うと簡単だ!
TTTAttributedLabelは[GitHub](https://github.com/mattt/TTTAttributedLabel)やCocoaPodから入手できる、オープンソースです。

予め、プロジェクトにTTTAttributedLabelを導入しておく。
TTTAttributedLabelのインスタンスを作成します。
肝は

linkLabel.enabledTextCheckingTypes = NSTextCheckingTypeLink;

でしょう。
このプロパティをセットした後にテキストをセットすると、
URLを探し、リンク表示してくれます。
Objective-CとSwiftで試しました。