sasayakki

新卒iOSエンジニアがささやくブログ

文字列からURLの部分を抽出する方法

抽出

- (NSArray *)pickUpURLFromString:(NSString *)string {

    //--------------------------------------------------------------------------------
    // 検索
    //--------------------------------------------------------------------------------

    // 文字列抽出用の正規表現オブジェクトを生成する
    NSError *error = nil;
    NSString *URLPattern = @"(http://|https://){1}[\\w\\.\\-/:]+";
    NSRegularExpression *regularExpressionForPickOut = [NSRegularExpression regularExpressionWithPattern:URLPattern options:0 error:&error];
    
    // 検索対象の文字列の中から正規表現にマッチした件数分の結果を取得
    NSArray *matchesInString = [regularExpressionForPickOut matchesInString:string options:0 range:NSMakeRange(0, string.length)];
    
    // 検索結果を配列に入れる
    NSMutableArray *strings = [NSMutableArray array];
    for (int i=0 ; i<matchesInString.count ; i++) {
        NSTextCheckingResult *checkingResult = matchesInString[i];
        NSString *expressionPattern = [string substringWithRange:[checkingResult rangeAtIndex:0]];
        [strings addObject:expressionPattern];
    }
    return strings;
}

置換

- (NSString *)replaceString:(NSString *)string fromURLs:(NSArray *)urls toTemplate:(NSString *)template{
    NSError *error;
    NSString *expressionPattern = [urls componentsJoinedByString:@"|"];
    // 配列から変換対象の正規表現パターンが完成したら、それを元にNSRegularExpressionを作成する
    NSRegularExpression *regularExpressionForReplace = [NSRegularExpression regularExpressionWithPattern:expressionPattern options:0 error:&error];
    
    // 置換対象の文字列すべてをテンプレートに従ってに置換していく
    NSString *replacedString = [regularExpressionForReplace stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0,string.length) withTemplate:template];
    return replacedString;
    
}

使い方

// ViewController.m
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *string = @"http://qiita.com/ と http://www.google.com";
    NSArray *urls = [self pickUpURLFromString:string];
    NSString *replacedText = [self replaceString:string fromURLs:urls toTemplate:@"<ここURLでした>"];
    NSLog(@"before : %@",string);
    NSLog(@"hit urls : %@",urls);
    NSLog(@"after  : %@",replacedText);

}

結果

 before : http://qiita.com/ と http://www.google.com
 hit urls : (
    "http://qiita.com/",
    "http://www.google.com"
)
 after  : <ここURLでした> と <ここURLでした>

HerokuとDropboxを連携する方法

先日herokuからDropboxとのリンクができるようになったということなので、そのメモ ただし、BETA版です。

手順

  1. Dropboxとリンクする
  2. Appを更新
  3. デプロイ

1. Dropboxとリンクする

  1. herokuのダッシュボードにアクセス
  2. リンクしたいアプリを選択(なければ作成)
  3. Code タブを選択
  4. 下方にあるDropbox BETA の Connect to Dropbox をクリック
  5. Dropboxで権限を許可

    Dropbox/アプリ/Heroku/app-name

のディレクトリが作成される

2. Appを更新

Dropboxを同期していれば

Dropbox/アプリ/Heroku/app-name

にあるファイルを更新するだけです。

3. デプロイ

You have to click the “Deploy” button in Heroku dashboard when you want to deploy changes, changes are not automatically synced.

Dropboxに同期していても、自動でherokuには反映してくれません。

そのため、更新が終わったら手動でのデプロイが必要です。

  1. herokuのダッシュボードにアクセス
  2. デプロイしたいアプリを選択
  3. Code タブを選択
  4. 下方にあるテキストボックスにコミットメッセージを入力
  5. Deploy をクリック

で、反映されます。

Storyboardを開くとクラッシュするときの対処法

現象

Storyboardを選択すると、開かれずにクラッシュする。

環境

原因

他のPC(OSX 10.9以降)でStroryboardの変更を行うと、NSAppearance属性がつく。 そのプロジェクトをOSX 10.8以前のPCで開くと OSX 10.8以前はNSAppearanceに対応していないため、解決できずにクラッシュする。

解決法

  1. OSアップデート
  2. NSAppearance属性を除去

1. OSアップデート

Mavericks以降であればなんでもOK

2. NSAppearance属性を除去

Storyboardを右クリックし、
Open AsSource Code を選択

 appearanceType="aqua" 

属性を全て除去

参考

NSAppearance

シミュレータ上でだけ画像が回転してしまう

Finderでも Xcode上でも正しい向きなのに、

いざ Storyboardで置いたり UIImage imageNamed で表示してみると

90度回転してしまったり、物によっては180度回転してしまう。

情報を見てみると

f:id:sasakky_j:20150523151305p:plain

(⌘ + I で出ます)

画像がそもそも回転しているものだったと。

ということで、新しく正しい向きにして書きだそう

手順

  1. プレビューで画像を開く
  2. メニュー>ファイル>書き出す…
  3. そのまま保存
  4. 置き換える

だけです。


  追記:Storyboard上でも回転します。

TestFlight登録手順

TestFlightとは

iPhoneアプリ開発のテストをOTA(On The Air)でのアプリ配布をサポートするサービス アップロードがあるたびテスターはそのアプリをインストールできる

Get started (Develper)

Create a New Team and Invite a teammate (Developer)

  • Teamの作成 (Create a New Team)
  • チームメンバーの追加 (Invite a teammate)

Join the Team (Tester)

  • 受信したメールからチームメンバーがチームに参加 (Accept Invitation)
  • 参加したチームメンバーのUDIDをプロビジョニングポータルで登録
  • プロビジョニングファイルを作成開発者のXcodeに登録

Distribution App (Developer)

  • XcodeのプロジェクトのBuildSetting>Code Signing Identity をダウンロードしたProvisioning Profileに設定
  • 配布用IPAファイルを出力
  • TargetをiOS Device に設定
  • Menu > Product > Archive
  • Distribute...
  • Save for Enterprise or Ad-Hoc Deployment
  • Provisioning Profile はダウンロードしたものを設定 ※ここで選べない場合はXcodeへの登録が未完了 (iOS Developer ProgramのAgent権限より証明書と秘密鍵の受け取りが必要)
  • IPAファイルの書き出し
  • IPAファイルをTestFlightにアップロード (Add a Build)
  • アップデートの通知を送るテスターを選択

Install the App (Tester)

  • 送信されたメールのAcceptをタップ
  • TestFlightに飛ぶのでINSTALL

参考URL TestFlightでアプリを配布しよう