SlideShare a Scribd company logo
CodeInjectionTool
             コード編集しながらライブデバッグ体験




13年3月2日土曜日
Injection for Xcode
                                               v3.2
               http://injectionforxcode.com/




13年3月2日土曜日
How to Use
             1. pkgをDLしてインストール

             2. Injection Plugin.appからFile->Install Plugin

             3. Xcodeを再起動

             4. Product->Patch Project for Injection
             5. 実行中にソースを書き換えて⌘=


13年3月2日土曜日
GoodPoint

             • 実機でも動く
             • GUIでパラメータを調節できる
             • AppCodeにも対応
               今回はXcode4.6でのみ確認しています




13年3月2日土曜日
GoodPoint

             • 実機でも動く
             • GUIでパラメータを調節できる
             • AppCodeにも対応
               今回はXcode4.6でのみ確認しています




13年3月2日土曜日
IssuePoint
                        実機実行でハマりやすい


                 Build Phases->RunScriptを追加する
   echo "$CODESIGNING_FOLDER_PATH" >/tmp/"$USER.ident" && echo "$CODE_SIGN_IDENTITY" >>/
   tmp/"$USER.ident" && exit;




                   それでもCodeSignエラーが出る
                  KeyChainに同じ名前の証明書がダブってるとダメらしい




13年3月2日土曜日
IssuePoint
                 自分のプロジェクトが汚される

        Patchした時…

              main.mとPrefix.pchが書き換えられる
       Injectionした時…

             InjectionBundle.xcodeprojが作成される
  実機実行の場合などは…

                 RunScriptに追記する必要がある

                    間違えてcommitするとチームメイトに迷惑・・・


13年3月2日土曜日
IssuePoint
                              なんかエラーが出る
        Case 1.
             Xcodeで複数プロジェクトを開いていると、
             InjectionBundleが全く違うプロジェクトを参照することがある
              => InjectionBundleを削除して、1プロジェクトだけ開いた状態にする
        Case 2.

             StoryBoardの変更が適用されない
              => 公式によるとRunScriptに以下を追加
                  "$HOME/Library/Application Support/Developer/Shared/Xcode/Plug-ins/
                  InjectionPlugin.xcplugin/Contents/Resources/projectBuilt.pl"

              => でも動かなかった。Xibもダメ・・・原因調査中
        Case 3.

             MacのIPアドレスが変わると実機で動かない
              => Macとソケット通信する仕組みのため、再Patchで対応
13年3月2日土曜日
Dynamic Code Injection
                                        v0.1.3

               http://dyci.github.com



13年3月2日土曜日
How to Use

             1. githubからcloneしてinstall.shを実行

             2. Xcodeを再起動

             3. cocoaPodを使ってプロジェクトに追加

             4. 実行中にソースを書き換えて⌃X



13年3月2日土曜日
GoodPoint

             •cocoaPod対応   staitcライブラリリンクにも対応



             • 自分のプロジェクトが汚れない
             • リソースファイルも追加可能
             • AppCodeにも対応

13年3月2日土曜日
GoodPoint

             •cocoaPod対応   staitcライブラリリンクにも対応



             • 自分のプロジェクトが汚れない
             • リソースファイルも追加可能
             • AppCodeにも対応

13年3月2日土曜日
IssuePoint

                シミュレータでしか動かない


             変更したファイルごとにInjectionが必要




13年3月2日土曜日
IssuePoint
             インストール時にClangを置き換える


              Xcodeのアップデートに注意!
             一旦プラグインをUninstallしてから
                アップデートすること




13年3月2日土曜日
IssuePoint
             Storyboardに対応していない




13年3月2日土曜日
IssuePoint
                 Storyboardに対応していない


                          対応してみた
             https://github.com/ShunsukeAraki/dyci-main

                         please clone me!




13年3月2日土曜日
IssuePoint
                 Storyboardに対応していない


                          対応してみた
             https://github.com/ShunsukeAraki/dyci-main

                         please clone me!
                        segueを書き換えると落ちます;;




13年3月2日土曜日
IssuePoint
                 Storyboardに対応していない


                          対応してみた
             https://github.com/ShunsukeAraki/dyci-main

                         please clone me!
                        segueを書き換えると落ちます;;

                        Storyboardハックしてみませんか



13年3月2日土曜日
MorePoint
      InjectionされたらViewControllerをリロード
@implemantation MyViewController
- (void)updateOnClassInjection {
! if ([self isViewLoaded]) {
! ! UIView *superView = self.view.superview;
! ! CGRect oldFrame = self.view.frame;
! ! NSUInteger index = [superView.subviews indexOfObject:self.view];

! !    [self.view removeFromSuperview];
! !    self.view = nil;

! !    [superView insertSubview:self.view atIndex:index];
! !    self.view.frame = oldFrame;
! }
}



13年3月2日土曜日
MorePoint
      InjectionされたらViewControllerをリロード
@implemantation MyViewController
- (void)updateOnClassInjection {
! if ([self isViewLoaded]) {
! ! UIView *superView = self.view.superview;
! ! CGRect oldFrame = self.view.frame;
! ! NSUInteger index = [superView.subviews indexOfObject:self.view];

! !    [self.view removeFromSuperview];
! !    self.view = nil;

! !    [superView insertSubview:self.view atIndex:index];
! !    self.view.frame = oldFrame;
! }
}
               _,CF,CA,NS,UI,Webで始まるクラスは
               updateOnClassInjectionが呼ばれない
13年3月2日土曜日

More Related Content

PDF
Osc2012 appinventor のその後
PDF
Jsug spring bootコードリーディング 接触篇 a contact
PDF
MacRuby を使ってみました
PDF
いつやるの?Git入門 v1.1.0
PDF
ようこそ! Swift Playgroundsへ
PDF
Gws 20140418 camel_groovy
PPTX
それRxJSでできるよ
PDF
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Osc2012 appinventor のその後
Jsug spring bootコードリーディング 接触篇 a contact
MacRuby を使ってみました
いつやるの?Git入門 v1.1.0
ようこそ! Swift Playgroundsへ
Gws 20140418 camel_groovy
それRxJSでできるよ
Spring Bootキャンプ @関ジャバ #kanjava_sbc

Similar to Code injectiontool (20)

PDF
Build 番号の自動更新スクリプトについて #cocoa_kansai
PDF
Xcode 7 の新しいところ #cm_ios9
PDF
Xcodeプラグインで快適な開発ライフを
PDF
DevSap20120728
PDF
Cocos2dx 8hour
PDF
CocosBuilderの紹介
KEY
1.29.user,user,user
PDF
Unity に於けるモバイルプラットフォーム向けビルド自動化のおはなし
PDF
Androidとの同時開発だけどモデルをC++で書けば問題ないよねっ
PDF
cocos2d-x公開講座 in 鹿児島
PDF
iOSアプリ開発の現場で訊いてきたtips
PDF
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
PDF
Cocoaアプリに無理矢理プラグインを導入する入門
PDF
Storyboard
PDF
Ib資料20090222
PDF
オープンセミナー2013@広島
PDF
Objectie-C de ラムダ
KEY
Objc lambda
PDF
オープンソースエコシステム #demodaytokyo
PDF
継続的インテグレーション を軽く紹介
Build 番号の自動更新スクリプトについて #cocoa_kansai
Xcode 7 の新しいところ #cm_ios9
Xcodeプラグインで快適な開発ライフを
DevSap20120728
Cocos2dx 8hour
CocosBuilderの紹介
1.29.user,user,user
Unity に於けるモバイルプラットフォーム向けビルド自動化のおはなし
Androidとの同時開発だけどモデルをC++で書けば問題ないよねっ
cocos2d-x公開講座 in 鹿児島
iOSアプリ開発の現場で訊いてきたtips
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Cocoaアプリに無理矢理プラグインを導入する入門
Storyboard
Ib資料20090222
オープンセミナー2013@広島
Objectie-C de ラムダ
Objc lambda
オープンソースエコシステム #demodaytokyo
継続的インテグレーション を軽く紹介
Ad

Code injectiontool

  • 1. CodeInjectionTool コード編集しながらライブデバッグ体験 13年3月2日土曜日
  • 2. Injection for Xcode v3.2 http://injectionforxcode.com/ 13年3月2日土曜日
  • 3. How to Use 1. pkgをDLしてインストール 2. Injection Plugin.appからFile->Install Plugin 3. Xcodeを再起動 4. Product->Patch Project for Injection 5. 実行中にソースを書き換えて⌘= 13年3月2日土曜日
  • 4. GoodPoint • 実機でも動く • GUIでパラメータを調節できる • AppCodeにも対応 今回はXcode4.6でのみ確認しています 13年3月2日土曜日
  • 5. GoodPoint • 実機でも動く • GUIでパラメータを調節できる • AppCodeにも対応 今回はXcode4.6でのみ確認しています 13年3月2日土曜日
  • 6. IssuePoint 実機実行でハマりやすい Build Phases->RunScriptを追加する echo "$CODESIGNING_FOLDER_PATH" >/tmp/"$USER.ident" && echo "$CODE_SIGN_IDENTITY" >>/ tmp/"$USER.ident" && exit; それでもCodeSignエラーが出る KeyChainに同じ名前の証明書がダブってるとダメらしい 13年3月2日土曜日
  • 7. IssuePoint 自分のプロジェクトが汚される Patchした時… main.mとPrefix.pchが書き換えられる Injectionした時… InjectionBundle.xcodeprojが作成される 実機実行の場合などは… RunScriptに追記する必要がある 間違えてcommitするとチームメイトに迷惑・・・ 13年3月2日土曜日
  • 8. IssuePoint なんかエラーが出る Case 1. Xcodeで複数プロジェクトを開いていると、 InjectionBundleが全く違うプロジェクトを参照することがある  => InjectionBundleを削除して、1プロジェクトだけ開いた状態にする Case 2. StoryBoardの変更が適用されない  => 公式によるとRunScriptに以下を追加 "$HOME/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ InjectionPlugin.xcplugin/Contents/Resources/projectBuilt.pl"  => でも動かなかった。Xibもダメ・・・原因調査中 Case 3. MacのIPアドレスが変わると実機で動かない  => Macとソケット通信する仕組みのため、再Patchで対応 13年3月2日土曜日
  • 9. Dynamic Code Injection v0.1.3 http://dyci.github.com 13年3月2日土曜日
  • 10. How to Use 1. githubからcloneしてinstall.shを実行 2. Xcodeを再起動 3. cocoaPodを使ってプロジェクトに追加 4. 実行中にソースを書き換えて⌃X 13年3月2日土曜日
  • 11. GoodPoint •cocoaPod対応 staitcライブラリリンクにも対応 • 自分のプロジェクトが汚れない • リソースファイルも追加可能 • AppCodeにも対応 13年3月2日土曜日
  • 12. GoodPoint •cocoaPod対応 staitcライブラリリンクにも対応 • 自分のプロジェクトが汚れない • リソースファイルも追加可能 • AppCodeにも対応 13年3月2日土曜日
  • 13. IssuePoint シミュレータでしか動かない 変更したファイルごとにInjectionが必要 13年3月2日土曜日
  • 14. IssuePoint インストール時にClangを置き換える Xcodeのアップデートに注意! 一旦プラグインをUninstallしてから アップデートすること 13年3月2日土曜日
  • 15. IssuePoint Storyboardに対応していない 13年3月2日土曜日
  • 16. IssuePoint Storyboardに対応していない 対応してみた https://github.com/ShunsukeAraki/dyci-main please clone me! 13年3月2日土曜日
  • 17. IssuePoint Storyboardに対応していない 対応してみた https://github.com/ShunsukeAraki/dyci-main please clone me! segueを書き換えると落ちます;; 13年3月2日土曜日
  • 18. IssuePoint Storyboardに対応していない 対応してみた https://github.com/ShunsukeAraki/dyci-main please clone me! segueを書き換えると落ちます;; Storyboardハックしてみませんか 13年3月2日土曜日
  • 19. MorePoint InjectionされたらViewControllerをリロード @implemantation MyViewController - (void)updateOnClassInjection { ! if ([self isViewLoaded]) { ! ! UIView *superView = self.view.superview; ! ! CGRect oldFrame = self.view.frame; ! ! NSUInteger index = [superView.subviews indexOfObject:self.view]; ! ! [self.view removeFromSuperview]; ! ! self.view = nil; ! ! [superView insertSubview:self.view atIndex:index]; ! ! self.view.frame = oldFrame; ! } } 13年3月2日土曜日
  • 20. MorePoint InjectionされたらViewControllerをリロード @implemantation MyViewController - (void)updateOnClassInjection { ! if ([self isViewLoaded]) { ! ! UIView *superView = self.view.superview; ! ! CGRect oldFrame = self.view.frame; ! ! NSUInteger index = [superView.subviews indexOfObject:self.view]; ! ! [self.view removeFromSuperview]; ! ! self.view = nil; ! ! [superView insertSubview:self.view atIndex:index]; ! ! self.view.frame = oldFrame; ! } } _,CF,CA,NS,UI,Webで始まるクラスは updateOnClassInjectionが呼ばれない 13年3月2日土曜日