Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINE Developer Meet Up #2

LINE Developer Meet Up #2

Yosuke Ishikawa

March 26, 2014
Tweet

More Decks by Yosuke Ishikawa

Other Decks in Technology

Transcript

  1. iOS Development
    in LINE Corp.
    @_ishkawa

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. • iOSΤϯδχΞ4೥໨
    • খ͞Ίͷձࣾ → େ͖Ίͷձࣾ

    View Slide

  6. • ίϯϙʔωϯτͷ࠶ར༻
    • ձࣾͰͷiOSΤϯδχΞͷ໾ׂ
    ࠓ೔ͷ࿩

    View Slide

  7. • ίϯϙʔωϯτͷ࠶ར༻
    • ձࣾͰͷiOSΤϯδχΞͷ໾ׂ
    ࠓ೔ͷ࿩
    LINEʹ͸iOSΤϯδχΞ͕ͨ͘͞Μ͍ΔͷͰ

    View Slide

  8. • ίϯϙʔωϯτͷ࠶ར༻
    • ձࣾͰͷiOSΤϯδχΞͷ໾ׂ
    ࠓ೔ͷ࿩
    LINEʹ͸ඇΤϯδχΞ΋ͨ͘͞Μ͍ΔͷͰ

    View Slide

  9. View Slide

  10. ίϯϙʔωϯτʁ

    View Slide

  11. [SVProgressHUD show];

    View Slide

  12. • ؆୯ʹ࣮૷Ͱ͖ͦ͏ʹݟ͑Δ
    • ࡉ෦·ͰϚδϝʹͭ͘Δͷ͸େม
    • SVProgressHUD͸໿800ߦ

    View Slide

  13. ֤ʑ͕ಠཱʹಉ͡΋ͷΛ
    ͭ͘Δͷ͸΋͍ͬͨͳ͍
    1౓ॻ͍ͨΒଞͷਓ΋
    ࢖͑ΔΑ͏ʹ͠Α͏ʂ

    View Slide

  14. • ։ൃ࣌ؒͷ୹ॖ
    • ඼࣭ͷ޲্
    • ϝϯςφϯείετͷ཈੍
    ϝϦοτ

    View Slide

  15. ͍ͭॻ͍ͯΔͷʁ

    View Slide

  16. ΞϓϦݻ༗Ͱ͸ͳ͍ίʔυΛ
    ॻ͍ͯͨΒͦͷ෦෼Λ੾Γग़͢

    View Slide

  17. ྫ: ISCyclicPagesView
    https://github.com/ishkawa/ISCyclicPagesView

    View Slide

  18. • ແݶεΫϩʔϧόφʔ
    • 22ίϛοτ
    • ໿200ߦ

    View Slide

  19. ΞϓϦͷίʔυͱಉ͡ॻ͖ํʁ

    View Slide

  20. ΞϓϦͷίʔυͱಉ͡ॻ͖ํʁ

    View Slide

  21. • ඞཁे෼ͳΠϯλʔϑΣʔε
    • ଞ΁ͷ෭࡞༻Λؚ·ͳ͍
    ཁ͢ΔʹߦّΑ͘

    View Slide

  22. • ඞཁे෼ͳΠϯλʔϑΣʔε
    • ଞ΁ͷ෭࡞༻Λؚ·ͳ͍

    View Slide

  23. มߋՄೳͳϓϩύςΟΛߜΔ
    @interface ISCyclicPagesView : UIScrollView
    !
    @property (nonatomic, readonly) NSInteger currentPage;
    @property (nonatomic, readonly) NSInteger numberOfPages;
    @property (nonatomic, assign) id dataSource;
    @property (nonatomic, assign) id delegate;
    !
    - (void)reloadData;
    - (void)scrollToPage:(NSInteger)page
    direction:(NSInteger)direction
    animated:(BOOL)animated;
    !
    - (NSInteger)pageForView:(UIView *)view;
    - (UIView *)viewForPage:(NSInteger)page;
    !
    @end

    View Slide

  24. ֎͔Βݺ͹Εͯ΋͍͍ϝιουͷΈΛެ։
    @interface ISCyclicPagesView : UIScrollView
    !
    @property (nonatomic, readonly) NSInteger currentPage;
    @property (nonatomic, readonly) NSInteger numberOfPages;
    @property (nonatomic, assign) id dataSource;
    @property (nonatomic, assign) id delegate;
    !
    - (void)reloadData;
    - (void)scrollToPage:(NSInteger)page
    direction:(NSInteger)direction
    animated:(BOOL)animated;
    !
    - (NSInteger)pageForView:(UIView *)view;
    - (UIView *)viewForPage:(NSInteger)page;
    !
    @end

    View Slide

  25. ಺෦ॲཧ༻ͷϓϩύςΟ͸ެ։͠ͳ͍
    @interface ISCyclicPagesView ()
    !
    @property (nonatomic) NSInteger currentPage;
    @property (nonatomic) NSInteger numberOfPages;
    @property (nonatomic, strong) NSArray *reusableViews;
    !
    @end

    View Slide

  26. ಺෦ॲཧ༻ͷఆ਺͸ެ։͠ͳ͍
    static NSInteger const ISReusableViewsCount = 3;

    View Slide

  27. • ඞཁे෼ͳΠϯλʔϑΣʔε
    • ଞ΁ͷ෭࡞༻Λؚ·ͳ͍

    View Slide

  28. Өڹൣғͷେ͖͍֦ு
    view.frame = CGRectMake(10.f,
    view.frame.origin.x,
    view.frame.size.width,
    view.frame.size.height);
    view.x = 10.f;

    View Slide

  29. Өڹൣғͷେ͖͍֦ு
    @implementation UIView (Additions)
    !
    - (CGFloat)x
    {
    return self.frame.origin.x;
    }
    !
    - (void)setX:(CGFloat)x
    {
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
    }
    !
    @end

    View Slide

  30. App Library
    x
    setX:
    x
    setX:
    ͲͪΒͷx, setX:ͷ࣮૷͕࣮ߦ͞ΕΔͷ͔ෆఆ

    View Slide

  31. Өڹൣғͷେ͖͍֦ு
    @implementation UIView (Additions)
    !
    - (CGFloat)x
    {
    return self.frame.origin.x;
    }
    !
    - (void)setX:(CGFloat)x
    {
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
    }
    !
    @end

    View Slide

  32. ϥΠϒϥϦ֎ͷมߋΛͳΔ΂͘ආ͚Δ
    [UIView appearance].backgroundColor = [UIColor blueColor];
    !
    [UIApplication sharedApplication].statusBarHidden = YES;

    View Slide

  33. Ͳ͜ͰίʔυΛެ։͢Δ͔ʁ

    View Slide

  34. View Slide

  35. ձࣾݻ༗ͷίʔυ৔߹

    View Slide

  36. Πϯετʔϧ΍ߋ৽Λ
    ؆୯ʹ͢Δʹ͸ʁ

    View Slide

  37. http://cocoapods.org

    View Slide

  38. Demo

    View Slide

  39. ϥΠϒϥϦΛॻ͍ͨΒ
    CocoaPodsʹରԠͤ͞Α͏

    View Slide

  40. ϥΠϒϥϦΛॻ͍ͨΒ
    podspecΛॻ͜͏

    View Slide

  41. Pod::Spec.new do |s|
    s.name = "ISDiskCache"
    s.version = "0.1.1"
    s.platform = :ios, "4.3"
    s.summary = "LRU disk cache for iOS."
    s.homepage = "https://github.com/ishkawa/ISDiskCache"
    s.source_files = "ISDiskCache/**/*.{h,m}"
    s.requires_arc = true
    s.author = {
    "Yosuke Ishikawa" => "[email protected]"
    }
    s.source = {
    :git => "https://github.com/ishkawa/ISDiskCache.git",
    :tag => "0.1.1"
    }
    s.license = {
    :type => "MIT",
    :text => <<-LICENSE
    ...
    LICENSE
    }
    end
    podspec

    View Slide

  42. podspecͷஔ͖৔͸ʁ

    View Slide

  43. • ϥΠϒϥϦͷϦϙδτϦ
    • CocoaPodsͷϦϙδτϦ
    • In HouseͷϦϙδτϦ

    View Slide

  44. • ϥΠϒϥϦͷϦϙδτϦ
    • CocoaPodsͷϦϙδτϦ
    • In HouseͷϦϙδτϦ

    View Slide

  45. View Slide

  46. View Slide

  47. pod 'ISDiskCache', :git => ‘https://github.com/ishkawa/ISDiskCache.git', :tag => '0.1.1'
    Podfile

    View Slide

  48. • ϥΠϒϥϦͷϦϙδτϦ
    • CocoaPodsͷϦϙδτϦ
    • In HouseͷϦϙδτϦ

    View Slide

  49. CocoaPods/Specs
    ͜͜ʹొ࿥͞Ε͍ͯΕ͹
    ࣗಈతʹօͷखݩʹೖΔ
    podspec
    Pull Request
    https://github.com/CocoaPods/Specs

    View Slide

  50. https://github.com/CocoaPods/Specs/pull/2780

    View Slide

  51. pod 'ISDiskCache', '~> 0.1.1'
    Podfile

    View Slide

  52. • ϥΠϒϥϦͷϦϙδτϦ
    • CocoaPodsͷϦϙδτϦ
    • In HouseͷϦϙδτϦ

    View Slide

  53. CocoaPods/Specs
    ಠࣗͷpodspecஔ͖৔Λ௥ՃͰ͖Δ
    LINE-Corp/Specs

    View Slide

  54. View Slide

  55. pod repo add in-house https://github.com/ishkawa/CocoaPodsSpecs.git
    Command

    View Slide

  56. pod 'ISDiskCache', '~> 0.1.1'
    Podfile

    View Slide

  57. View Slide

  58. LINEͰͷίʔυͷ࠶ར༻ͷ·ͱΊ

    View Slide

  59. • ͔ͤͬ͘ॻ͍ͨίϯϙʔωϯτ͸ෳ਺νʔϜͰ࠶ར༻
    • ΞϓϦݻ༗Ͱͳ͚Ε͹ϥΠϒϥϦͱͯ͠੾Γग़ͯ͠ެ։
    • ϥΠϒϥϦͷίʔυ͸ߦّྑ͘ॻ͘
    • CocoaPodsʹରԠͤͯ͞ར༻͠΍͘͢͢Δ

    View Slide

  60. LINEͰ͸GitHub Enterpriseͱ
    CocoaPodsΛར༻ͯ͠
    ίʔυͷ࠶ར༻ΛਐΊ͍ͯ·͢

    View Slide

  61. • Pull RequestͰίʔυϨϏϡʔ
    • Ϣχοτςετͷಋೖ
    ࠷ۙ͸ࣾ಺ʹ͜ΜͳྲྀΕ΋͋Γ·͢

    View Slide

  62. View Slide

  63. iOSΤϯδχΞͷ໾ׂ = iOSΞϓϦͷ։ൃ

    View Slide

  64. ϓϩάϥϜΛॻ͘ + ͦͷଞଟ਺

    View Slide

  65. αʔϏεઃܭ
    UIઃܭ
    UIϓϩτλΠϐϯά
    ςετέʔεͷ࡞੒
    શόʔδϣϯͰಈ࡞֬ೝ
    ϞϯΩʔςετ
    ར༻౷ܭͷઃܭ
    Dev Centerͷ࡞ۀ
    iTunes Connectͷ࡞ۀ

    View Slide

  66. ϓϩάϥϜΛॻ͘ + ͦͷଞଟ਺
    ͬͪ͜ʹूத͍ͨ͠

    View Slide

  67. • اը/σβΠϯઌߦͷϑϩʔ
    • खް͍QA
    LINEͷಛ௃

    View Slide

  68. • اը/σβΠϯઌߦͷϑϩʔ
    • खް͍QA
    LINEͷಛ௃

    View Slide

  69. αʔϏεઃܭ UIσβΠϯ ࣮૷ QA
    ͜͜ͰࢀՃ͢Δ

    View Slide

  70. • اը/σβΠϯઌߦͷϑϩʔ
    • खް͍QA
    LINEͷಛ௃

    View Slide

  71. • QAઐ໳෦໳͕୲౰
    • ෳ਺ਓ͕શόʔδϣϯͷOSͰςετ
    • ࠶ݱঢ়گΛৄࡉʹใࠂͯ͠΋Β͑Δ
    • ༧૝ͷ3ഒͷෆ۩߹Λൃݟͯ͠΋Β͑Δ

    ※ ݸਓͷײ૝Ͱ͢
    ϦϦʔεલޙͷετϨε͕͔ͳΓܰݮ͞ΕΔ

    View Slide

  72. LINEʹ͸iOSΤϯδχΞ͕
    ։ൃʹूதͰ͖Δ؀ڥ͕੔͍ͬͯ·͢

    View Slide

  73. LINEͰ͸iOSΤϯδχΞΛืू͍ͯ͠·͢

    View Slide