├── .gitignore ├── README.md ├── WWDC2015_links.txt ├── main.js ├── package.json ├── subtitle_util.js ├── subtitles ├── HD │ ├── 101_hd_keynote.srt │ ├── 102_hd_platforms_state_of_the_union.srt │ ├── 103_hd_apple_design_awards.srt │ ├── 104_hd_whats_new_in_xcode.srt │ ├── 105_hd_introducing_watchkit_for_watchos_2.srt │ ├── 106_hd_whats_new_in_swift.srt │ ├── 107_hd_whats_new_in_cocoa_touch.srt │ ├── 108_hd_building_watch_apps.srt │ ├── 201_hd_ios_accessibility.srt │ ├── 202_hd_whats_new_in_cocoa.srt │ ├── 203_hd_whats_new_in_healthkit.srt │ ├── 204_hd_apple_watch_accessibility.srt │ ├── 205_hd_getting_started_with_multitasking_on_ipad_in_ios_9.srt │ ├── 206_hd_whats_new_in_mapkit.srt │ ├── 207_hd_watchkit_indepth_part_1.srt │ ├── 208_hd_watchkit_indepth_part_2.srt │ ├── 209_hd_creating_complications_with_clockkit.srt │ ├── 210_hd_whats_new_in_homekit.srt │ ├── 211_hd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.srt │ ├── 212_hd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.srt │ ├── 213_hd_building_apps_with_researchkit.srt │ ├── 214_hd_introducing_on_demand_resources.srt │ ├── 215_hd_whats_new_in_storyboards.srt │ ├── 216_hd_layout_and_animation_techniques_for_watchkit.srt │ ├── 217_hd_adopting_new_trackpad_features.srt │ ├── 218_hd_mysteries_of_auto_layout_part_1.srt │ ├── 219_hd_mysteries_of_auto_layout_part_2.srt │ ├── 220_hd_whats_new_in_core_data.srt │ ├── 221_hd_improving_the_full_screen_window_experience.srt │ ├── 222_hd_new_uikit_support_for_international_user_interfaces.srt │ ├── 223_hd_introducing_the_contacts_framework_for_ios_and_os_x.srt │ ├── 224_hd_app_extension_best_practices.srt │ ├── 225_hd_whats_new_in_nscollectionview.srt │ ├── 226_hd_advanced_nsoperations.srt │ ├── 227_hd_whats_new_in_internationalization.srt │ ├── 228_hd_watchkit_tips_and_tricks.srt │ ├── 229_hd_whats_new_in_uikit_dynamics_and_visual_effects.srt │ ├── 230_hd_performance_on_ios_and_watchos.srt │ ├── 231_hd_cocoa_touch_best_practices.srt │ ├── 232_hd_best_practices_for_progress_reporting.srt │ ├── 233_hd_advanced_touch_input_on_ios.srt │ ├── 234_hd_building_document_based_apps.srt │ ├── 301_hd_whats_new_in_managing_apple_devices.srt │ ├── 302_hd_whats_new_in_itunes_connect.srt │ ├── 303_hd_getting_the_most_out_of_app_analytics.srt │ ├── 304_hd_itunes_connect_development_to_distribution.srt │ ├── 306_hd_supporting_the_enterprise_with_os_x_automation.srt │ ├── 401_hd_swift_and_objectivec_interoperability.srt │ ├── 402_hd_whats_new_in_lldb.srt │ ├── 403_hd_improving_your_existing_apps_with_swift.srt │ ├── 404_hd_app_thinning_in_xcode.srt │ ├── 405_hd_authoring_rich_playgrounds.srt │ ├── 406_hd_ui_testing_in_xcode.srt │ ├── 407_hd_implementing_ui_designs_in_interface_builder.srt │ ├── 408_hd_protocoloriented_programming_in_swift.srt │ ├── 409_hd_optimizing_swift_performance.srt │ ├── 410_hd_continuous_integration_and_code_coverage_in_xcode.srt │ ├── 411_hd_swift_in_practice.srt │ ├── 412_hd_profiling_in_depth.srt │ ├── 413_hd_advanced_debugging_and_the_address_sanitizer.srt │ ├── 414_hd_building_better_apps_with_value_types_in_swift.srt │ ├── 501_hd_whats_new_in_web_development_in_webkit_and_safari.srt │ ├── 502_hd_content_protection_for_http_live_streaming.srt │ ├── 503_hd_monetize_and_promote_your_app_with_iad.srt │ ├── 504_hd_introducing_safari_view_controller.srt │ ├── 505_hd_using_safari_to_deliver_and_debug_a_responsive_web_design.srt │ ├── 506_hd_editing_movies_in_av_foundation.srt │ ├── 507_hd_whats_new_in_core_audio.srt │ ├── 508_hd_audio_unit_extensions.srt │ ├── 509_hd_seamless_linking_to_your_app.srt │ ├── 510_hd_whats_new_in_core_image.srt │ ├── 511_hd_safari_extensibility_content_blocking_and_shared_links.srt │ ├── 602_hd_managing_3d_assets_with_model_io.srt │ ├── 603_hd_whats_new_in_metal_part_1.srt │ ├── 604_hd_whats_new_in_spritekit.srt │ ├── 605_hd_going_social_with_replaykit_and_game_center.srt │ ├── 606_hd_enhancements_to_scenekit.srt │ ├── 607_hd_whats_new_in_metal_part_2.srt │ ├── 608_hd_introducing_gameplaykit.srt │ ├── 609_hd_deeper_into_gameplaykit_with_demobots.srt │ ├── 610_hd_metal_performance_optimization_techniques.srt │ ├── 701_hd_wallet__the_home_for_apple_pay_and_more.srt │ ├── 702_hd_apple_pay_within_apps.srt │ ├── 703_hd_privacy_and_your_app.srt │ ├── 704_hd_whats_new_in_cloudkit.srt │ ├── 705_hd_whats_new_in_core_motion.srt │ ├── 706_hd_security_and_your_apps.srt │ ├── 707_hd_achieving_allday_battery_life.srt │ ├── 708_hd_debugging_energy_issues.srt │ ├── 709_hd_introducing_search_apis.srt │ ├── 710_hd_cloudkit_js_and_web_services.srt │ ├── 711_hd_networking_with_nsurlsession.srt │ ├── 712_hd_low_energy_high_performance_compression_and_accelerate.srt │ ├── 713_hd_introducing_watch_connectivity.srt │ ├── 714_hd_whats_new_in_core_location.srt │ ├── 715_hd_cloudkit_tips_and_tricks.srt │ ├── 717_hd_whats_new_in_network_extension_and_vpn.srt │ ├── 718_hd_building_responsive_and_efficient_apps_with_gcd.srt │ ├── 719_hd_your_app_and_next_generation_networks.srt │ ├── 720_hd_whats_new_in_notifications.srt │ ├── 801_hd_designing_for_future_hardware.srt │ ├── 802_hd_designing_for_apple_watch.srt │ ├── 803_hd_designing_with_animation.srt │ ├── 804_hd_introducing_the_new_system_fonts.srt │ └── 805_hd_apple_watch_design_tips_and_tricks.srt └── SD │ ├── 101_sd_keynote.srt │ ├── 102_sd_platforms_state_of_the_union.srt │ ├── 103_sd_apple_design_awards.srt │ ├── 104_sd_whats_new_in_xcode.srt │ ├── 105_sd_introducing_watchkit_for_watchos_2.srt │ ├── 106_sd_whats_new_in_swift.srt │ ├── 107_sd_whats_new_in_cocoa_touch.srt │ ├── 108_sd_building_watch_apps.srt │ ├── 201_sd_ios_accessibility.srt │ ├── 202_sd_whats_new_in_cocoa.srt │ ├── 203_sd_whats_new_in_healthkit.srt │ ├── 204_sd_apple_watch_accessibility.srt │ ├── 205_sd_getting_started_with_multitasking_on_ipad_in_ios_9.srt │ ├── 206_sd_whats_new_in_mapkit.srt │ ├── 207_sd_watchkit_indepth_part_1.srt │ ├── 208_sd_watchkit_indepth_part_2.srt │ ├── 209_sd_creating_complications_with_clockkit.srt │ ├── 210_sd_whats_new_in_homekit.srt │ ├── 211_sd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.srt │ ├── 212_sd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.srt │ ├── 213_sd_building_apps_with_researchkit.srt │ ├── 214_sd_introducing_on_demand_resources.srt │ ├── 215_sd_whats_new_in_storyboards.srt │ ├── 216_sd_layout_and_animation_techniques_for_watchkit.srt │ ├── 217_sd_adopting_new_trackpad_features.srt │ ├── 218_sd_mysteries_of_auto_layout_part_1.srt │ ├── 219_sd_mysteries_of_auto_layout_part_2.srt │ ├── 220_sd_whats_new_in_core_data.srt │ ├── 221_sd_improving_the_full_screen_window_experience.srt │ ├── 222_sd_new_uikit_support_for_international_user_interfaces.srt │ ├── 223_sd_introducing_the_contacts_framework_for_ios_and_os_x.srt │ ├── 224_sd_app_extension_best_practices.srt │ ├── 225_sd_whats_new_in_nscollectionview.srt │ ├── 226_sd_advanced_nsoperations.srt │ ├── 227_sd_whats_new_in_internationalization.srt │ ├── 228_sd_watchkit_tips_and_tricks.srt │ ├── 229_sd_whats_new_in_uikit_dynamics_and_visual_effects.srt │ ├── 230_sd_performance_on_ios_and_watchos.srt │ ├── 231_sd_cocoa_touch_best_practices.srt │ ├── 232_sd_best_practices_for_progress_reporting.srt │ ├── 233_sd_advanced_touch_input_on_ios.srt │ ├── 234_sd_building_document_based_apps.srt │ ├── 301_sd_whats_new_in_managing_apple_devices.srt │ ├── 302_sd_whats_new_in_itunes_connect.srt │ ├── 303_sd_getting_the_most_out_of_app_analytics.srt │ ├── 304_sd_itunes_connect_development_to_distribution.srt │ ├── 306_sd_supporting_the_enterprise_with_os_x_automation.srt │ ├── 401_sd_swift_and_objectivec_interoperability.srt │ ├── 402_sd_whats_new_in_lldb.srt │ ├── 403_sd_improving_your_existing_apps_with_swift.srt │ ├── 404_sd_app_thinning_in_xcode.srt │ ├── 405_sd_authoring_rich_playgrounds.srt │ ├── 406_sd_ui_testing_in_xcode.srt │ ├── 407_sd_implementing_ui_designs_in_interface_builder.srt │ ├── 408_sd_protocoloriented_programming_in_swift.srt │ ├── 409_sd_optimizing_swift_performance.srt │ ├── 410_sd_continuous_integration_and_code_coverage_in_xcode.srt │ ├── 411_sd_swift_in_practice.srt │ ├── 412_sd_profiling_in_depth.srt │ ├── 413_sd_advanced_debugging_and_the_address_sanitizer.srt │ ├── 414_sd_building_better_apps_with_value_types_in_swift.srt │ ├── 501_sd_whats_new_in_web_development_in_webkit_and_safari.srt │ ├── 502_sd_content_protection_for_http_live_streaming.srt │ ├── 503_sd_monetize_and_promote_your_app_with_iad.srt │ ├── 504_sd_introducing_safari_view_controller.srt │ ├── 505_sd_using_safari_to_deliver_and_debug_a_responsive_web_design.srt │ ├── 506_sd_editing_movies_in_av_foundation.srt │ ├── 507_sd_whats_new_in_core_audio.srt │ ├── 508_sd_audio_unit_extensions.srt │ ├── 509_sd_seamless_linking_to_your_app.srt │ ├── 510_sd_whats_new_in_core_image.srt │ ├── 511_sd_safari_extensibility_content_blocking_and_shared_links.srt │ ├── 602_sd_managing_3d_assets_with_model_io.srt │ ├── 603_sd_whats_new_in_metal_part_1.srt │ ├── 604_sd_whats_new_in_spritekit.srt │ ├── 605_sd_going_social_with_replaykit_and_game_center.srt │ ├── 606_sd_enhancements_to_scenekit.srt │ ├── 607_sd_whats_new_in_metal_part_2.srt │ ├── 608_sd_introducing_gameplaykit.srt │ ├── 609_sd_deeper_into_gameplaykit_with_demobots.srt │ ├── 610_sd_metal_performance_optimization_techniques.srt │ ├── 701_sd_wallet__the_home_for_apple_pay_and_more.srt │ ├── 702_sd_apple_pay_within_apps.srt │ ├── 703_sd_privacy_and_your_app.srt │ ├── 704_sd_whats_new_in_cloudkit.srt │ ├── 705_sd_whats_new_in_core_motion.srt │ ├── 706_sd_security_and_your_apps.srt │ ├── 707_sd_achieving_allday_battery_life.srt │ ├── 708_sd_debugging_energy_issues.srt │ ├── 709_sd_introducing_search_apis.srt │ ├── 710_sd_cloudkit_js_and_web_services.srt │ ├── 711_sd_networking_with_nsurlsession.srt │ ├── 712_sd_low_energy_high_performance_compression_and_accelerate.srt │ ├── 713_sd_introducing_watch_connectivity.srt │ ├── 714_sd_whats_new_in_core_location.srt │ ├── 715_sd_cloudkit_tips_and_tricks.srt │ ├── 717_sd_whats_new_in_network_extension_and_vpn.srt │ ├── 718_sd_building_responsive_and_efficient_apps_with_gcd.srt │ ├── 719_sd_your_app_and_next_generation_networks.srt │ ├── 720_sd_whats_new_in_notifications.srt │ ├── 801_sd_designing_for_future_hardware.srt │ ├── 802_sd_designing_for_apple_watch.srt │ ├── 803_sd_designing_with_animation.srt │ ├── 804_sd_introducing_the_new_system_fonts.srt │ └── 805_sd_apple_watch_design_tips_and_tricks.srt ├── wwdc2015-全集-标清下载地址.txt ├── wwdc2015-全集-课件pdf.txt ├── wwdc2015-全集-高清下载地址.txt ├── wwdc2015-单项课件及视频下载地址.md ├── wwdc2015.rb └── 中文字幕 ├── 215_hd_whats_new_in_storyboards.srt ├── 504_hd_introducing_safari_view_controller.srt └── 字幕工具说明.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .DS_Store 3 | node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ##WWDC 2015 英文字幕 2 | 3 | iOS 开发者的春节到了,我也例行的创建了这个 Repo,在未来数日内会更新所有 WWDC 2015 的视频字幕。 字幕文件抓取自苹果官方。 4 | 5 | 更新进度: 6 | 1. 更新至 40 个,总 105 (2015-06-20) 7 | 2. 更新至 85 个,总 105,剩余 20 (2015-06-21) 8 | 3. 更新至 89 个,总 105,剩余 16 (2015-06-22) 9 | 4. 更新至 96 个,总 105,剩余 9 (2015-06-23) 10 | 5. 更新至 104 个,总 105,剩余 1 (2015-06-25) 11 | 5. 更新全部 105 个 (2015-07-05) 12 | 13 | 为了便于使用,字幕文件同时存在于 `subtitles/HD` 和 `subtitles/SD` 文件夹下,两个目录下的文件内容一样,只是文件名不同,请根据自己下载的视频格式来自由选择对应的字幕文件。 14 | 15 | 如果你想自己来下载或者更新字幕文件,可以安装 [`Node.js`](https://nodejs.org/)的环境,然后在 project 的根目录执行`npm install` 来安装依赖,然后执行`npm start`来运行下载脚本。 16 | 17 | * [WWDC 2014 英文字幕](https://github.com/qiaoxueshi/WWDC_2014_Video_Subtitle) 18 | * [WWDC 2013 英文字幕](https://github.com/qiaoxueshi/WWDC_2013_Video_Subtitle) 19 | -------------------------------------------------------------------------------- /WWDC2015_links.txt: -------------------------------------------------------------------------------- 1 | http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_hd_adopting_new_trackpad_features.mp4?dl=1 2 | http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_hd_advanced_nsoperations.mp4?dl=1 3 | http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_hd_advanced_touch_input_on_ios.mp4?dl=1 4 | http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_hd_app_extension_best_practices.mp4?dl=1 5 | http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_hd_apple_watch_accessibility.mp4?dl=1 6 | http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_hd_best_practices_for_progress_reporting.mp4?dl=1 7 | http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_hd_building_apps_with_researchkit.mp4?dl=1 8 | http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_hd_building_document_based_apps.mp4?dl=1 9 | http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_hd_cocoa_touch_best_practices.mp4?dl=1 10 | http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_hd_creating_complications_with_clockkit.mp4?dl=1 11 | http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_hd_getting_started_with_multitasking_on_ipad_in_ios_9.mp4?dl=1 12 | http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_hd_improving_the_full_screen_window_experience.mp4?dl=1 13 | http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_hd_introducing_on_demand_resources.mp4?dl=1 14 | http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_hd_introducing_safari_view_controller.mp4?dl=1 15 | http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_hd_introducing_the_contacts_framework_for_ios_and_os_x.mp4?dl=1 16 | http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_hd_layout_and_animation_techniques_for_watchkit.mp4?dl=1 17 | http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_hd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.mp4?dl=1 18 | http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_hd_mysteries_of_auto_layout_part_1.mp4?dl=1 19 | http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_hd_mysteries_of_auto_layout_part_2.mp4?dl=1 20 | http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_hd_new_uikit_support_for_international_user_interfaces.mp4?dl=1 21 | http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_hd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.mp4?dl=1 22 | http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_hd_performance_on_ios_and_watchos.mp4?dl=1 23 | http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_hd_seamless_linking_to_your_app.mp4?dl=1 24 | http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_hd_watchkit_indepth_part_1.mp4?dl=1 25 | http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_hd_watchkit_indepth_part_2.mp4?dl=1 26 | http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_hd_watchkit_tips_and_tricks.mp4?dl=1 27 | http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_hd_whats_new_in_cocoa.mp4?dl=1 28 | http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_hd_whats_new_in_core_data.mp4?dl=1 29 | http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_hd_whats_new_in_healthkit.mp4?dl=1 30 | http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_hd_whats_new_in_homekit.mp4?dl=1 31 | http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_hd_whats_new_in_internationalization.mp4?dl=1 32 | http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_hd_whats_new_in_mapkit.mp4?dl=1 33 | http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_hd_whats_new_in_nscollectionview.mp4?dl=1 34 | http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_hd_whats_new_in_storyboards.mp4?dl=1 35 | http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_hd_whats_new_in_uikit_dynamics_and_visual_effects.mp4?dl=1 36 | http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_hd_ios_accessibility.mp4?dl=1 37 | http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_hd_apple_watch_design_tips_and_tricks.mp4?dl=1 38 | http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_hd_designing_for_apple_watch.mp4?dl=1 39 | http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_hd_designing_for_future_hardware.mp4?dl=1 40 | http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_hd_designing_with_animation.mp4?dl=1 41 | http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_hd_introducing_the_new_system_fonts.mp4?dl=1 42 | http://devstreaming.apple.com/videos/wwdc/2015/413eflf3lrh1tyo/413/413_hd_advanced_debugging_and_the_address_sanitizer.mp4?dl=1 43 | http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_hd_app_thinning_in_xcode.mp4?dl=1 44 | http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_hd_authoring_rich_playgrounds.mp4?dl=1 45 | http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_hd_building_better_apps_with_value_types_in_swift.mp4?dl=1 46 | http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_hd_continuous_integration_and_code_coverage_in_xcode.mp4?dl=1 47 | http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_hd_implementing_ui_designs_in_interface_builder.mp4?dl=1 48 | http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_hd_improving_your_existing_apps_with_swift.mp4?dl=1 49 | http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_hd_optimizing_swift_performance.mp4?dl=1 50 | http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_hd_profiling_in_depth.mp4?dl=1 51 | http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_hd_protocoloriented_programming_in_swift.mp4?dl=1 52 | http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_hd_swift_and_objectivec_interoperability.mp4?dl=1 53 | http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_hd_swift_in_practice.mp4?dl=1 54 | http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_hd_ui_testing_in_xcode.mp4?dl=1 55 | http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_hd_whats_new_in_lldb.mp4?dl=1 56 | http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_hd_getting_the_most_out_of_app_analytics.mp4?dl=1 57 | http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_hd_supporting_the_enterprise_with_os_x_automation.mp4?dl=1 58 | http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_hd_whats_new_in_managing_apple_devices.mp4?dl=1 59 | http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_hd_whats_new_in_itunes_connect.mp4?dl=1 60 | http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_hd_itunes_connect_development_to_distribution.mp4?dl=1 61 | http://devstreaming.apple.com/videos/wwdc/2015/103ot7lzkdri2fvn1iyh/103/103_hd_apple_design_awards.mp4?dl=1 62 | http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_hd_building_watch_apps.mp4?dl=1 63 | http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_hd_introducing_watchkit_for_watchos_2.mp4?dl=1 64 | http://devstreaming.apple.com/videos/wwdc/2015/1014o78qhj07pbfxt9g7/101/101_hd_keynote.mp4?dl=1 65 | http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_hd_platforms_state_of_the_union.mp4?dl=1 66 | http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_hd_whats_new_in_cocoa_touch.mp4?dl=1 67 | http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_hd_whats_new_in_swift.mp4?dl=1 68 | http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_hd_whats_new_in_xcode.mp4?dl=1 69 | http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_hd_deeper_into_gameplaykit_with_demobots.mp4?dl=1 70 | http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_hd_enhancements_to_scenekit.mp4?dl=1 71 | http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_hd_going_social_with_replaykit_and_game_center.mp4?dl=1 72 | http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_hd_introducing_gameplaykit.mp4?dl=1 73 | http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_hd_managing_3d_assets_with_model_io.mp4?dl=1 74 | http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_hd_metal_performance_optimization_techniques.mp4?dl=1 75 | http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_hd_whats_new_in_metal_part_1.mp4?dl=1 76 | http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_hd_whats_new_in_metal_part_2.mp4?dl=1 77 | http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_hd_whats_new_in_spritekit.mp4?dl=1 78 | http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_hd_audio_unit_extensions.mp4?dl=1 79 | http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_hd_content_protection_for_http_live_streaming.mp4?dl=1 80 | http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_hd_editing_movies_in_av_foundation.mp4?dl=1 81 | http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_hd_monetize_and_promote_your_app_with_iad.mp4?dl=1 82 | http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_hd_safari_extensibility_content_blocking_and_shared_links.mp4?dl=1 83 | http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_hd_using_safari_to_deliver_and_debug_a_responsive_web_design.mp4?dl=1 84 | http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_hd_whats_new_in_core_audio.mp4?dl=1 85 | http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_hd_whats_new_in_core_image.mp4?dl=1 86 | http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_hd_whats_new_in_web_development_in_webkit_and_safari.mp4?dl=1 87 | http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_hd_achieving_allday_battery_life.mp4?dl=1 88 | http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_hd_apple_pay_within_apps.mp4?dl=1 89 | http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_hd_building_responsive_and_efficient_apps_with_gcd.mp4?dl=1 90 | http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_hd_cloudkit_js_and_web_services.mp4?dl=1 91 | http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_hd_cloudkit_tips_and_tricks.mp4?dl=1 92 | http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_hd_debugging_energy_issues.mp4?dl=1 93 | http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_hd_introducing_search_apis.mp4?dl=1 94 | http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_hd_introducing_watch_connectivity.mp4?dl=1 95 | http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_hd_low_energy_high_performance_compression_and_accelerate.mp4?dl=1 96 | http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_hd_networking_with_nsurlsession.mp4?dl=1 97 | http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_hd_privacy_and_your_app.mp4?dl=1 98 | http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_hd_security_and_your_apps.mp4?dl=1 99 | http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_hd_wallet__the_home_for_apple_pay_and_more.mp4?dl=1 100 | http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_hd_whats_new_in_cloudkit.mp4?dl=1 101 | http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_hd_whats_new_in_core_location.mp4?dl=1 102 | http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_hd_whats_new_in_core_motion.mp4?dl=1 103 | http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_hd_whats_new_in_network_extension_and_vpn.mp4?dl=1 104 | http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_hd_whats_new_in_notifications.mp4?dl=1 105 | http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_hd_your_app_and_next_generation_networks.mp4?dl=1 106 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by qiaoxueshi on 6/20/15. 3 | */ 4 | 5 | var async = require('async'); 6 | var request = require('request'); 7 | var fx = require('fs-extra'); 8 | var fs = require('fs'); 9 | var sutil = require('./subtitle_util'); 10 | 11 | var videoLinksFile = "WWDC2015_links.txt"; 12 | var subtitlesFolderForHD = "subtitles/HD/"; 13 | var subtitlesFolderForSD = "subtitles/SD/"; 14 | 15 | var videoURLRegex = /(http:\/\/devstreaming.apple.com\/videos\/wwdc\/2015\/\w+\/\d+\/)(\w+)\.mp4\?dl=1/; 16 | async.waterfall([ 17 | //read links file 18 | function(callback) { 19 | fs.readFile(videoLinksFile, 'utf-8', function (err, data) { 20 | if (err) throw err; 21 | var lines = data.split("\n"); 22 | var links = lines.filter(function (line) { 23 | return line && line.length > 0; 24 | }); 25 | callback(null, links); 26 | }); 27 | }, 28 | 29 | //parse links, generate an info object for each link 30 | function(videoURLs, callback) { 31 | console.log(videoURLs.length + " links found"); 32 | 33 | callback(null, videoURLs.map(function(url) { 34 | var group = url.match(videoURLRegex); 35 | if (group) { 36 | return { 37 | videoURL: group[0], 38 | videoURLPrefix: group[1], 39 | videoNameWithOutExtension: group[2], 40 | subtitleNameForHD: subtitlesFolderForHD + group[2] + ".srt", 41 | subtitleNameForSD: subtitlesFolderForSD + group[2].replace("_hd_", "_sd_") + ".srt", 42 | webvttFileNames: [], 43 | errorMessage: null, 44 | skip:false 45 | }; 46 | } else { 47 | return null; 48 | } 49 | })); 50 | }, 51 | 52 | //check if subtitle file has been downloaded, if so, mark skip to true 53 | function(videoInfos, callback) { 54 | videoInfos.forEach(function (videoInfo) { 55 | videoInfo.skip = fs.existsSync(videoInfo.subtitleNameForHD) && fs.existsSync(videoInfo.subtitleNameForSD); 56 | }); 57 | callback(null, videoInfos); 58 | }, 59 | 60 | //download subtitle index .m3u8 file and generate webvtt file urls 61 | function (videoInfos, callback) { 62 | async.map(videoInfos, function (videoInfo, callback) { 63 | if (videoInfo.skip) { 64 | console.log("skip download subtitle of " + videoInfo.videoNameWithOutExtension); 65 | callback(null, videoInfo); 66 | } else { 67 | console.log("start download subtitle index file of " + videoInfo.videoNameWithOutExtension); 68 | var videoSubtitleIndexFileURL = videoInfo.videoURLPrefix + "subtitles/eng/prog_index.m3u8"; 69 | request(videoSubtitleIndexFileURL, function (err, response, body) { 70 | if (!err && response.statusCode === 200) { 71 | var webvttFileNames = body.split("\n").filter(function(line, index) { 72 | return line.indexOf("fileSequence") === 0; 73 | }); 74 | webvttFileNames = webvttFileNames.map(function (fileName) { 75 | return videoInfo.videoURLPrefix + "subtitles/eng/"+ fileName; 76 | }); 77 | videoInfo.webvttFileNames = webvttFileNames; 78 | } else { 79 | var errMsg = "Failed to fetch subtitle index file for video " + videoInfo.videoNameWithOutExtension + ", url:" + videoSubtitleIndexFileURL; 80 | videoInfo.errorMessage = errMsg; 81 | } 82 | callback(null, videoInfo); //ignore the errors, check it in the following step 83 | }); 84 | } 85 | }, function (err, videoInfos) { 86 | callback(null, videoInfos); 87 | }); 88 | }, 89 | 90 | //download webvtt files and combine them to a srt file 91 | function (videoInfos, callback) { 92 | async.mapLimit(videoInfos, 100, function (videoInfo, callback) { 93 | if (!videoInfo.skip && !videoInfo.errorMessage) { 94 | console.log("start to download webvtt files of " + videoInfo.videoNameWithOutExtension); 95 | (function (videoInfo) { 96 | async.reduce(videoInfo.webvttFileNames, [], function (webvttFilesLines, webvttFileURL, callback) { 97 | console.log("start to download webvtt file: " + webvttFileURL); 98 | request(webvttFileURL, function(err, response, body) { 99 | if (!err && response.statusCode === 200) { 100 | var lines = body.split("\n"); 101 | webvttFilesLines = webvttFilesLines.concat(lines); 102 | callback(null, webvttFilesLines); 103 | } else { 104 | videoInfo.errorMessage = errorMessage; 105 | callback(errorMessage, null); 106 | } 107 | }); 108 | }, function (err, webvttFilesLines) { 109 | if (webvttFilesLines.length > 0) { 110 | webvttFilesLines = webvttFilesLines.filter(function (line) { 111 | //remove webvtt file header, they're useless 112 | return line.indexOf("WEBVTT") !== 0 && line.indexOf("X-TIMESTAMP-MAP") !== 0; 113 | }); 114 | 115 | webvttFilesLines = sutil.webvttLinesToSrtLines(webvttFilesLines); 116 | 117 | 118 | //save to local FS 119 | fx.outputFile(videoInfo.subtitleNameForHD, webvttFilesLines.join("\n"), function (err) { 120 | if (err) { 121 | videoInfo.errorMessage = "Failed to save subtitles to file " + videoInfo.subtitleNameForHD; 122 | callback(null, videoInfo); 123 | } else { 124 | fx.outputFile(videoInfo.subtitleNameForSD, webvttFilesLines.join("\n"), function (err) { 125 | if (err) { 126 | videoInfo.errorMessage = "Failed to save subtitles to file " + videoInfo.subtitleNameForSD; 127 | } 128 | callback(null, videoInfo); 129 | }); 130 | } 131 | }); 132 | } 133 | }); 134 | })(videoInfo); 135 | } else { 136 | callback(null, videoInfo); 137 | } 138 | 139 | }, function (err, videoInfos) { 140 | callback(null, videoInfos); 141 | }); 142 | } 143 | ], function (err, videoInfos) { 144 | if (err) { 145 | console.log("failed to download subtitles, err:" + err); 146 | } else { 147 | var totalCount = videoInfos.length; 148 | var succeedCount = 0; 149 | var skippedCount = 0; 150 | videoInfos.forEach(function (videoInfo) { 151 | if (videoInfo.skip) { 152 | skippedCount ++; 153 | } else { 154 | succeedCount += (!videoInfo.errorMessage ? 1 : 0); 155 | } 156 | //if you want error messages, just log down videoInfo.errorMessage 157 | }); 158 | 159 | console.log("======================Finished, success rate: " + succeedCount + "/" + (totalCount - skippedCount) + 160 | ", " + (totalCount - succeedCount - skippedCount) + " failed, " 161 | + skippedCount + " skipped ======================"); 162 | } 163 | }); 164 | 165 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WWDC_2015_Video_Subtitle", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node main.js" 7 | }, 8 | "dependencies": { 9 | "async": "~0.9.0", 10 | "fs-extra": "^0.17.0", 11 | "request": "^2.54.0" 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /subtitle_util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by qiaoxueshi on 6/27/15. 3 | */ 4 | 5 | module.exports = { 6 | webvttLinesToSrtLines: function(webvttLines) { 7 | //match time line, such as: 00:00:29.586 --> 00:00:30.106 A:middle 8 | var timeLineRegex = /^([0-9:.]+)\.(\d+ --> [0-9:.]+)\.(\d+)/; 9 | var statements = []; 10 | var statement = {}; 11 | webvttLines.forEach(function(line) { 12 | if (line.trim().length != 0) { 13 | var groups = line.match(timeLineRegex); 14 | if (groups) { 15 | if (statement.timeLine) { 16 | statements.push(statement); 17 | statement = {}; 18 | } 19 | statement.timeLine = groups[1] + "," + groups[2] + "," + groups[3]; 20 | } else { 21 | line = line.replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&"); 22 | if (statement.subtitles) { 23 | statement.subtitles.push(line); 24 | } else { 25 | statement.subtitles = [line]; 26 | } 27 | } 28 | } 29 | }); 30 | if (statement.timeLine) { 31 | statements.push(statement); 32 | } 33 | 34 | statements = statements.filter(function (line, index, lines) { 35 | if (index > 0 && line.timeLine === lines[index - 1].timeLine) { 36 | return false; 37 | } else { 38 | return true; 39 | } 40 | }); 41 | 42 | var finalLines = []; 43 | statements.forEach(function (srtLine, index) { 44 | finalLines.push(index + 1); 45 | finalLines.push(srtLine.timeLine); 46 | srtLine.subtitles.forEach(function (subtitle) { 47 | finalLines.push(subtitle) 48 | }); 49 | finalLines.push("\n"); 50 | }); 51 | return finalLines; 52 | } 53 | }; -------------------------------------------------------------------------------- /subtitles/HD/503_hd_monetize_and_promote_your_app_with_iad.srt: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:25,046 --> 00:00:25,516 3 | >> CAROL TENG: Hello. 4 | 5 | 6 | 2 7 | 00:00:25,996 --> 00:00:26,436 8 | And welcome. 9 | 10 | 11 | 3 12 | 00:00:26,436 --> 00:00:32,826 13 | Many of you developers out there 14 | pour all of your time, effort, 15 | 16 | 17 | 4 18 | 00:00:33,306 --> 00:00:36,166 19 | blood, sweat, and tears 20 | into building some 21 | 22 | 23 | 5 24 | 00:00:36,166 --> 00:00:37,666 25 | of the most amazing, 26 | 27 | 28 | 6 29 | 00:00:37,666 --> 00:00:40,526 30 | entertaining, and 31 | beautiful apps. 32 | 33 | 34 | 7 35 | 00:00:41,206 --> 00:00:46,236 36 | The most successful developers, 37 | however, don't just focus 38 | 39 | 40 | 8 41 | 00:00:46,326 --> 00:00:48,476 42 | on building great apps. 43 | 44 | 45 | 9 46 | 00:00:48,766 --> 00:00:50,986 47 | They also recognize 48 | the importance 49 | 50 | 51 | 10 52 | 00:00:51,466 --> 00:00:55,676 53 | of building a great 54 | business around their apps. 55 | 56 | 57 | 11 58 | 00:00:55,996 --> 00:00:58,566 59 | And that's what we are here 60 | to talk to you about today. 61 | 62 | 63 | 12 64 | 00:00:59,556 --> 00:01:00,966 65 | My name is Carol Teng. 66 | 67 | 68 | 13 69 | 00:01:00,966 --> 00:01:03,736 70 | I will be joined by my 71 | colleague, Shashank Phadke, 72 | 73 | 74 | 14 75 | 00:01:03,736 --> 00:01:06,236 76 | and we are from the iAd team. 77 | 78 | 79 | 15 80 | 00:01:06,836 --> 00:01:10,496 81 | Today we are here to 82 | introduce you to iAd, 83 | 84 | 85 | 16 86 | 00:01:10,846 --> 00:01:13,106 87 | Apple's digital advertising 88 | platform. 89 | 90 | 91 | 17 92 | 00:01:14,346 --> 00:01:16,356 93 | Whether you are a 94 | large development house 95 | 96 | 97 | 18 98 | 00:01:16,606 --> 00:01:21,206 99 | or a small indie developer, iAd 100 | has a wide range of solutions 101 | 102 | 103 | 19 104 | 00:01:21,646 --> 00:01:23,286 105 | to help you grow your business. 106 | 107 | 108 | 20 109 | 00:01:24,006 --> 00:01:29,616 110 | And some of the challenges that 111 | all businesses face are how 112 | 113 | 114 | 21 115 | 00:01:29,616 --> 00:01:33,666 116 | to generate revenue and how to 117 | attract and retain customers. 118 | 119 | 120 | 22 121 | 00:01:34,476 --> 00:01:37,446 122 | iAd has solutions for both. 123 | 124 | 125 | 23 126 | 00:01:38,076 --> 00:01:41,876 127 | To help generate 128 | revenue, integrating iAd 129 | 130 | 131 | 24 132 | 00:01:41,876 --> 00:01:43,176 133 | into your app is simple. 134 | 135 | 136 | 25 137 | 00:01:44,156 --> 00:01:46,196 138 | And you can do this 139 | with minimal code. 140 | 141 | 142 | 26 143 | 00:01:46,386 --> 00:01:49,376 144 | We will show you how, 145 | later in the presentation. 146 | 147 | 148 | 27 149 | 00:01:51,776 --> 00:01:54,186 150 | Acquiring customers, 151 | on the other hand, 152 | 153 | 154 | 28 155 | 00:01:54,456 --> 00:01:57,016 156 | can be especially daunting 157 | for an app developer. 158 | 159 | 160 | 29 161 | 00:01:58,086 --> 00:01:59,366 162 | As you heard yesterday, 163 | 164 | 165 | 30 166 | 00:01:59,366 --> 00:02:03,216 167 | there are over 1.5 million 168 | apps in the App Store. 169 | 170 | 171 | 31 172 | 00:02:03,766 --> 00:02:07,236 173 | And an average of 119 174 | apps on a user's device. 175 | 176 | 177 | 32 178 | 00:02:08,216 --> 00:02:11,766 179 | That is a lot of competition 180 | vying for users' attention. 181 | 182 | 183 | 33 184 | 00:02:12,336 --> 00:02:15,166 185 | So how do you help 186 | your app get noticed? 187 | 188 | 189 | 34 190 | 00:02:15,786 --> 00:02:19,666 191 | For this, iAd has solutions 192 | 193 | 194 | 35 195 | 00:02:19,666 --> 00:02:23,586 196 | to help you efficiently promote 197 | your app in the iOS ecosystem 198 | 199 | 200 | 36 201 | 00:02:24,016 --> 00:02:27,316 202 | to generate awareness for your 203 | apps and acquire customers. 204 | 205 | 206 | 37 207 | 00:02:30,156 --> 00:02:33,756 208 | Promoting your app involves 209 | three main concepts. 210 | 211 | 212 | 38 213 | 00:02:34,926 --> 00:02:38,196 214 | First, identifying and 215 | segmenting your users 216 | 217 | 218 | 39 219 | 00:02:38,676 --> 00:02:40,976 220 | so you know who the 221 | different audiences are 222 | 223 | 224 | 40 225 | 00:02:40,976 --> 00:02:42,346 226 | that you are trying to reach. 227 | 228 | 229 | 41 230 | 00:02:43,656 --> 00:02:47,876 231 | Engaging those users with 232 | relevant and targeted messaging 233 | 234 | 235 | 42 236 | 00:02:47,876 --> 00:02:49,616 237 | in your app promotion campaigns, 238 | 239 | 240 | 43 241 | 00:02:50,156 --> 00:02:52,516 242 | and then measuring 243 | the effectiveness 244 | 245 | 246 | 44 247 | 00:02:52,576 --> 00:02:55,976 248 | of those campaigns, so you 249 | can continuously optimize 250 | 251 | 252 | 45 253 | 00:02:56,036 --> 00:02:57,196 254 | and improve the outcomes. 255 | 256 | 257 | 46 258 | 00:02:57,796 --> 00:03:03,406 259 | We will demonstrate how to 260 | use tools and best practices 261 | 262 | 263 | 47 264 | 00:03:03,706 --> 00:03:06,436 265 | that enable you to 266 | do both: monetize 267 | 268 | 269 | 48 270 | 00:03:06,866 --> 00:03:09,966 271 | and promote throughout your 272 | app development lifecycle. 273 | 274 | 275 | 49 276 | 00:03:10,966 --> 00:03:11,786 277 | Let's get started. 278 | 279 | 280 | 50 281 | 00:03:12,286 --> 00:03:17,006 282 | Imagine that I'm 283 | an app developer. 284 | 285 | 286 | 51 287 | 00:03:17,156 --> 00:03:19,636 288 | I have a few apps 289 | in the App Store. 290 | 291 | 292 | 52 293 | 00:03:19,766 --> 00:03:24,016 294 | And I'm about to launch my 295 | next great app, LiteRight. 296 | 297 | 298 | 53 299 | 00:03:25,386 --> 00:03:29,306 300 | LiteRight is a new camera app 301 | with some super special filters 302 | 303 | 304 | 54 305 | 00:03:29,306 --> 00:03:31,476 306 | that aren't available 307 | anywhere else. 308 | 309 | 310 | 55 311 | 00:03:32,036 --> 00:03:36,036 312 | It is going to be a free 313 | app which gives users access 314 | 315 | 316 | 56 317 | 00:03:36,096 --> 00:03:40,406 318 | to a subset of those filters, 319 | and in-app purchases allow users 320 | 321 | 322 | 57 323 | 00:03:40,406 --> 00:03:43,176 324 | to gain access to even 325 | more incredible filters. 326 | 327 | 328 | 58 329 | 00:03:45,876 --> 00:03:48,036 330 | This is my app development 331 | timeline, 332 | 333 | 334 | 59 335 | 00:03:48,166 --> 00:03:50,246 336 | which may look similar 337 | to your own. 338 | 339 | 340 | 60 341 | 00:03:50,726 --> 00:03:54,126 342 | Starting with the design phase, 343 | then I'll be developing the app, 344 | 345 | 346 | 61 347 | 00:03:54,576 --> 00:03:57,616 348 | launching it in the App Store, 349 | and growing my user base. 350 | 351 | 352 | 62 353 | 00:03:58,226 --> 00:04:02,286 354 | I'm currently in the 355 | design phase of LiteRight, 356 | 357 | 358 | 63 359 | 00:04:02,796 --> 00:04:05,046 360 | but I'm already thinking 361 | about the business model 362 | 363 | 364 | 64 365 | 00:04:05,116 --> 00:04:08,246 366 | and how I'm going 367 | to monetize my app. 368 | 369 | 370 | 65 371 | 00:04:08,766 --> 00:04:12,116 372 | Since LiteRight will be 373 | a free app, I've decided 374 | 375 | 376 | 66 377 | 00:04:12,116 --> 00:04:16,156 378 | to make it ad-supported so I 379 | can start generating revenue 380 | 381 | 382 | 67 383 | 00:04:16,156 --> 00:04:16,716 384 | right away. 385 | 386 | 387 | 68 388 | 00:04:17,276 --> 00:04:23,156 389 | And I've selected iAd as my 390 | preferred advertising partner 391 | 392 | 393 | 69 394 | 00:04:23,636 --> 00:04:28,006 395 | to monetize my app because iAd 396 | takes care of the whole process 397 | 398 | 399 | 70 400 | 00:04:28,306 --> 00:04:33,206 401 | of finding great advertisers, 402 | serving the ads, reporting on 403 | 404 | 405 | 71 406 | 00:04:33,286 --> 00:04:36,206 407 | and billing for the 408 | ads that run in my app. 409 | 410 | 411 | 72 412 | 00:04:36,976 --> 00:04:40,086 413 | And for that, iAd 414 | shares 70 percent 415 | 416 | 417 | 73 418 | 00:04:40,086 --> 00:04:42,816 419 | of the revenue generated 420 | directly with me. 421 | 422 | 423 | 74 424 | 00:04:43,376 --> 00:04:46,646 425 | And iAd isn't an 426 | exclusive network. 427 | 428 | 429 | 75 430 | 00:04:47,106 --> 00:04:48,956 431 | So I can work with 432 | other ad networks 433 | 434 | 435 | 76 436 | 00:04:48,956 --> 00:04:50,986 437 | and mediation partners 438 | if I choose. 439 | 440 | 441 | 77 442 | 00:04:52,276 --> 00:04:55,486 443 | But because I'm trying to 444 | maximize my revenue and I care 445 | 446 | 447 | 78 448 | 00:04:55,486 --> 00:04:58,246 449 | about premium, high quality ads, 450 | 451 | 452 | 79 453 | 00:04:58,806 --> 00:05:00,896 454 | I'm going to make 455 | iAd my first call. 456 | 457 | 458 | 80 459 | 00:05:00,896 --> 00:05:06,966 460 | Because I've spent a lot of 461 | time building a beautiful app, 462 | 463 | 464 | 81 465 | 00:05:07,446 --> 00:05:09,966 466 | the ads in my app should 467 | be equally beautiful. 468 | 469 | 470 | 82 471 | 00:05:11,366 --> 00:05:13,796 472 | To achieve that, 473 | iAd works with some 474 | 475 | 476 | 83 477 | 00:05:13,796 --> 00:05:17,886 478 | of the top creative agencies 479 | to deliver rich, immersive, 480 | 481 | 482 | 84 483 | 00:05:18,236 --> 00:05:20,946 484 | high production value 485 | ads from some 486 | 487 | 488 | 85 489 | 00:05:20,946 --> 00:05:23,306 490 | of the world's most 491 | recognized brands. 492 | 493 | 494 | 86 495 | 00:05:23,826 --> 00:05:28,356 496 | In addition, every ad is 497 | reviewed and certified 498 | 499 | 500 | 87 501 | 00:05:28,616 --> 00:05:32,506 502 | by the iAd team so I can be 503 | sure that the ads appearing 504 | 505 | 506 | 88 507 | 00:05:32,506 --> 00:05:35,576 508 | in my app comply with 509 | Apple's creative guidelines. 510 | 511 | 512 | 89 513 | 00:05:36,116 --> 00:05:41,936 514 | And I can block any unwanted ads 515 | using key words and iTunes URLs. 516 | 517 | 518 | 90 519 | 00:05:43,286 --> 00:05:46,166 520 | And all of this contributes 521 | to a great user experience. 522 | 523 | 524 | 91 525 | 00:05:46,556 --> 00:05:52,556 526 | LiteRight is going to be 527 | a globally available app 528 | 529 | 530 | 92 531 | 00:05:52,556 --> 00:05:56,766 532 | which means my users will 533 | be everywhere and so is iAd, 534 | 535 | 536 | 93 537 | 00:05:57,696 --> 00:06:01,916 538 | with the ability to reach iOS 539 | users in over 100 countries. 540 | 541 | 542 | 94 543 | 00:06:02,516 --> 00:06:08,896 544 | And speaking of my users, iAd's 545 | solution is privacy conscious, 546 | 547 | 548 | 95 549 | 00:06:09,556 --> 00:06:11,796 550 | with built-in privacy controls. 551 | 552 | 553 | 96 554 | 00:06:12,646 --> 00:06:15,756 555 | That means my users' 556 | data is highly secure 557 | 558 | 559 | 97 560 | 00:06:15,756 --> 00:06:18,196 561 | and is never shared 562 | with third-parties, 563 | 564 | 565 | 98 566 | 00:06:18,736 --> 00:06:20,626 567 | which my users will appreciate. 568 | 569 | 570 | 99 571 | 00:06:21,696 --> 00:06:23,436 572 | It complies with 573 | limit ad tracking, 574 | 575 | 576 | 100 577 | 00:06:23,766 --> 00:06:25,866 578 | and is automatically 579 | managed by iAd, 580 | 581 | 582 | 101 583 | 00:06:26,406 --> 00:06:28,966 584 | due to a deep integration 585 | with iOS. 586 | 587 | 588 | 102 589 | 00:06:29,856 --> 00:06:36,026 590 | And because iAd is built 591 | into the iOS framework, 592 | 593 | 594 | 103 595 | 00:06:36,826 --> 00:06:40,176 596 | integrating it into my 597 | app is quick and simple. 598 | 599 | 600 | 104 601 | 00:06:40,856 --> 00:06:44,906 602 | There are no additional 603 | SDKs and no static libraries 604 | 605 | 606 | 105 607 | 00:06:44,976 --> 00:06:47,326 608 | or third-party headers 609 | to clutter up my project. 610 | 611 | 612 | 106 613 | 00:06:48,126 --> 00:06:50,846 614 | I can be up and running 615 | with minimal code. 616 | 617 | 618 | 107 619 | 00:06:51,986 --> 00:06:54,596 620 | Documentation and 621 | sample code are available 622 | 623 | 624 | 108 625 | 00:06:54,596 --> 00:06:55,726 626 | to help me along the way. 627 | 628 | 629 | 109 630 | 00:06:56,276 --> 00:07:01,076 631 | And here are all the ad 632 | formats that iAd offers. 633 | 634 | 635 | 110 636 | 00:07:01,806 --> 00:07:05,526 637 | I can integrate one or more 638 | of these ad formats depending 639 | 640 | 641 | 111 642 | 00:07:05,596 --> 00:07:09,466 643 | on what best complements my 644 | app content and experience. 645 | 646 | 647 | 112 648 | 00:07:10,026 --> 00:07:14,856 649 | A banner, which typically 650 | appears at the bottom 651 | 652 | 653 | 113 654 | 00:07:14,856 --> 00:07:21,256 655 | of the app, a medium rectangle 656 | or M-rec which is good in-line 657 | 658 | 659 | 114 660 | 00:07:21,256 --> 00:07:23,286 661 | for content-heavy apps. 662 | 663 | 664 | 115 665 | 00:07:25,356 --> 00:07:28,286 666 | Pre-roll video that 667 | are best for apps 668 | 669 | 670 | 116 671 | 00:07:28,316 --> 00:07:30,006 672 | that primarily deliver video. 673 | 674 | 675 | 117 676 | 00:07:32,316 --> 00:07:35,716 677 | And interstitial, for apps that 678 | have good, logical transitions, 679 | 680 | 681 | 118 682 | 00:07:35,716 --> 00:07:38,986 683 | such as in games where 684 | users are leveling up. 685 | 686 | 687 | 119 688 | 00:07:40,966 --> 00:07:44,866 689 | And coming soon, iAd will 690 | support interstitial video, 691 | 692 | 693 | 120 694 | 00:07:45,566 --> 00:07:48,566 695 | another way to help further 696 | increase monetization 697 | 698 | 699 | 121 700 | 00:07:48,836 --> 00:07:53,906 701 | for my app. 702 | 703 | 704 | 122 705 | 00:07:54,176 --> 00:07:55,856 706 | Now let's look at 707 | how we integrate iAd 708 | 709 | 710 | 123 711 | 00:07:56,146 --> 00:07:58,186 712 | into my app, LiteRight. 713 | 714 | 715 | 124 716 | 00:07:59,546 --> 00:08:02,656 717 | For LiteRight, I'm going 718 | to include banner ads 719 | 720 | 721 | 125 722 | 00:08:02,656 --> 00:08:04,186 723 | on the photo gallery screen, 724 | 725 | 726 | 126 727 | 00:08:04,756 --> 00:08:08,096 728 | and an interstitial every third 729 | time a user shares a photo. 730 | 731 | 732 | 127 733 | 00:08:08,666 --> 00:08:14,916 734 | For the banner, I need to link 735 | to the iAd framework and import, 736 | 737 | 738 | 128 739 | 00:08:15,456 --> 00:08:17,986 740 | include the iAd library 741 | as part of my project. 742 | 743 | 744 | 129 745 | 00:08:17,986 --> 00:08:22,426 746 | Then I'll need to configure 747 | the view controller, 748 | 749 | 750 | 130 751 | 00:08:22,606 --> 00:08:24,986 752 | such that wherever I 753 | want a banner to appear, 754 | 755 | 756 | 131 757 | 00:08:25,316 --> 00:08:27,586 758 | I'll set 'can display 759 | banner ads' to true. 760 | 761 | 762 | 132 763 | 00:08:28,486 --> 00:08:31,806 764 | And a good place to do this is 765 | in the 'view did load' callback. 766 | 767 | 768 | 133 769 | 00:08:32,566 --> 00:08:35,796 770 | iAd will take care 771 | of managing the view 772 | 773 | 774 | 134 775 | 00:08:35,796 --> 00:08:38,506 776 | such that the banner 777 | animates in on screen 778 | 779 | 780 | 135 781 | 00:08:38,506 --> 00:08:40,856 782 | and collapses the frame 783 | of my content accordingly. 784 | 785 | 786 | 136 787 | 00:08:41,416 --> 00:08:46,606 788 | And when I'm done, here is 789 | what that might look like. 790 | 791 | 792 | 137 793 | 00:08:47,166 --> 00:08:52,756 794 | Unlike banners there's a 795 | little more setup required 796 | 797 | 798 | 138 799 | 00:08:52,836 --> 00:08:54,736 800 | to prepare my app 801 | for interstitials. 802 | 803 | 804 | 139 805 | 00:08:55,356 --> 00:08:57,556 806 | In my app delegate, 807 | 808 | 809 | 140 810 | 00:08:57,556 --> 00:08:59,616 811 | in the 'application 812 | did finish launching 813 | 814 | 815 | 141 816 | 00:08:59,886 --> 00:09:04,686 817 | with options' callback, I need 818 | to let the iAd server know 819 | 820 | 821 | 142 822 | 00:09:04,686 --> 00:09:05,546 823 | that my app is going 824 | 825 | 826 | 143 827 | 00:09:05,546 --> 00:09:09,466 828 | to be requesting an interstitial 829 | via the 'prepare interstitial 830 | 831 | 832 | 144 833 | 00:09:09,466 --> 00:09:10,136 834 | ads' call. 835 | 836 | 837 | 145 838 | 00:09:10,756 --> 00:09:16,496 839 | And in the view controller, 840 | just prior to the interstitial, 841 | 842 | 843 | 146 844 | 00:09:16,616 --> 00:09:18,406 845 | I can configure the presentation 846 | 847 | 848 | 147 849 | 00:09:18,806 --> 00:09:21,216 850 | so that the interstitial 851 | will appear just before the 852 | 853 | 854 | 148 855 | 00:09:21,216 --> 00:09:22,036 856 | next screen. 857 | 858 | 859 | 149 860 | 00:09:23,086 --> 00:09:26,686 861 | A good place to do this is in 862 | the 'prepare for segue' method. 863 | 864 | 865 | 150 866 | 00:09:27,226 --> 00:09:31,066 867 | iAd makes this simple. 868 | 869 | 870 | 151 871 | 00:09:31,876 --> 00:09:35,186 872 | All I need to do is set the 873 | interstitial presentation policy 874 | 875 | 876 | 152 877 | 00:09:35,536 --> 00:09:36,296 878 | to automatic. 879 | 880 | 881 | 153 882 | 00:09:36,816 --> 00:09:40,406 883 | And this lets iAd manage the 884 | presentation of interstitial ads 885 | 886 | 887 | 154 888 | 00:09:40,796 --> 00:09:41,676 889 | in the view controller. 890 | 891 | 892 | 155 893 | 00:09:42,246 --> 00:09:47,226 894 | And when I'm done I can see 895 | what that will look like. 896 | 897 | 898 | 156 899 | 00:09:48,216 --> 00:09:51,036 900 | I have just shown you 901 | how to integrate a banner 902 | 903 | 904 | 157 905 | 00:09:51,036 --> 00:09:51,996 906 | and interstitial, 907 | 908 | 909 | 158 910 | 00:09:52,346 --> 00:09:55,226 911 | but integrating the other ad 912 | formats is just as simple, 913 | 914 | 915 | 159 916 | 00:09:56,386 --> 00:10:00,466 917 | and iAd has tools to let me test 918 | my integration so I can ensure 919 | 920 | 921 | 160 922 | 00:10:00,466 --> 00:10:03,776 923 | that I've implemented everything 924 | correctly before I launch. 925 | 926 | 927 | 161 928 | 00:10:05,536 --> 00:10:07,196 929 | For some of you at this stage, 930 | 931 | 932 | 162 933 | 00:10:07,556 --> 00:10:09,746 934 | there may still be more 935 | development work left 936 | 937 | 938 | 163 939 | 00:10:09,746 --> 00:10:10,086 940 | for your app. 941 | 942 | 943 | 164 944 | 00:10:11,076 --> 00:10:14,386 945 | But since I've taken the 946 | time to integrate iAd early 947 | 948 | 949 | 165 950 | 00:10:14,386 --> 00:10:17,236 951 | into my development cycle, 952 | I don't have to worry 953 | 954 | 955 | 166 956 | 00:10:17,236 --> 00:10:19,046 957 | about coming back 958 | and doing it later. 959 | 960 | 961 | 167 962 | 00:10:19,046 --> 00:10:22,906 963 | And I can be generating 964 | revenue as soon as I launch. 965 | 966 | 967 | 168 968 | 00:10:26,236 --> 00:10:28,746 969 | So now we've launched LiteRight. 970 | 971 | 972 | 169 973 | 00:10:29,776 --> 00:10:31,536 974 | It's live in the App Store. 975 | 976 | 977 | 170 978 | 00:10:31,626 --> 00:10:35,866 979 | Users are downloading 980 | and using the app. 981 | 982 | 983 | 171 984 | 00:10:36,126 --> 00:10:37,546 985 | And ads are running in it based 986 | 987 | 988 | 172 989 | 00:10:37,546 --> 00:10:39,166 990 | on the integrations 991 | I just showed you. 992 | 993 | 994 | 173 995 | 00:10:39,576 --> 00:10:42,826 996 | And here are examples of a 997 | banner and an interstitial. 998 | 999 | 1000 | 174 1001 | 00:10:43,386 --> 00:10:49,036 1002 | And I can see how much revenue 1003 | I'm generating from the ads 1004 | 1005 | 1006 | 175 1007 | 00:10:49,036 --> 00:10:51,696 1008 | in my app by checking 1009 | the reporting portals 1010 | 1011 | 1012 | 176 1013 | 00:10:51,696 --> 00:10:55,886 1014 | in iTunes Connect, or using 1015 | the new publisher reporting API 1016 | 1017 | 1018 | 177 1019 | 00:10:56,396 --> 00:10:57,916 1020 | that is coming soon. 1021 | 1022 | 1023 | 178 1024 | 00:10:59,016 --> 00:11:02,456 1025 | Because I've made the investment 1026 | to integrate iAd early 1027 | 1028 | 1029 | 179 1030 | 00:11:02,456 --> 00:11:06,166 1031 | on in my dev cycle, it 1032 | is already paying off. 1033 | 1034 | 1035 | 180 1036 | 00:11:09,056 --> 00:11:11,936 1037 | Now let's look at how to 1038 | make other smart investments 1039 | 1040 | 1041 | 181 1042 | 00:11:11,936 --> 00:11:14,186 1043 | that will grow my 1044 | app install base. 1045 | 1046 | 1047 | 182 1048 | 00:11:14,186 --> 00:11:20,456 1049 | So I'm earning the 1050 | steady stream of revenue 1051 | 1052 | 1053 | 183 1054 | 00:11:20,456 --> 00:11:22,716 1055 | by showing ads in my app. 1056 | 1057 | 1058 | 184 1059 | 00:11:22,766 --> 00:11:25,436 1060 | And some of you may choose 1061 | not to monetize your apps 1062 | 1063 | 1064 | 185 1065 | 00:11:25,436 --> 00:11:27,246 1066 | in this way, which is okay. 1067 | 1068 | 1069 | 186 1070 | 00:11:28,216 --> 00:11:31,546 1071 | All of you, however, probably 1072 | care about acquiring users 1073 | 1074 | 1075 | 187 1076 | 00:11:31,906 --> 00:11:35,206 1077 | and driving downloads 1078 | and usage of your app. 1079 | 1080 | 1081 | 188 1082 | 00:11:36,216 --> 00:11:38,526 1083 | And for that you 1084 | will need to invest 1085 | 1086 | 1087 | 189 1088 | 00:11:38,526 --> 00:11:40,196 1089 | in actively promoting your app 1090 | 1091 | 1092 | 190 1093 | 00:11:40,426 --> 00:11:43,206 1094 | which is what I plan 1095 | to do with LiteRight. 1096 | 1097 | 1098 | 191 1099 | 00:11:44,296 --> 00:11:47,666 1100 | Part of my growth strategy is 1101 | to take some of the revenue 1102 | 1103 | 1104 | 192 1105 | 00:11:47,666 --> 00:11:51,576 1106 | that I've earned from showing 1107 | ads in my app and reinvest it 1108 | 1109 | 1110 | 193 1111 | 00:11:51,576 --> 00:11:54,436 1112 | in marketing efforts to 1113 | promote LiteRight in order 1114 | 1115 | 1116 | 194 1117 | 00:11:54,436 --> 00:11:55,716 1118 | to expand my user base. 1119 | 1120 | 1121 | 195 1122 | 00:11:57,166 --> 00:12:00,316 1123 | As more people discover, 1124 | download, and use my app, 1125 | 1126 | 1127 | 196 1128 | 00:12:01,286 --> 00:12:04,376 1129 | that's more people engaging 1130 | with the ads in my app, 1131 | 1132 | 1133 | 197 1134 | 00:12:04,376 --> 00:12:07,016 1135 | which further increases 1136 | monetization. 1137 | 1138 | 1139 | 198 1140 | 00:12:07,786 --> 00:12:09,906 1141 | And this creates a 1142 | continuous cycle. 1143 | 1144 | 1145 | 199 1146 | 00:12:11,156 --> 00:12:15,606 1147 | So I can monetize 1148 | or I can promote, 1149 | 1150 | 1151 | 200 1152 | 00:12:15,606 --> 00:12:17,966 1153 | but experience has shown 1154 | 1155 | 1156 | 201 1157 | 00:12:17,966 --> 00:12:20,056 1158 | that I'm the most 1159 | successful when I do both. 1160 | 1161 | 1162 | 202 1163 | 00:12:20,646 --> 00:12:24,716 1164 | We just talked about how 1165 | to use iAd to monetize. 1166 | 1167 | 1168 | 203 1169 | 00:12:26,086 --> 00:12:29,526 1170 | Now let's talk about how 1171 | to use iAd to promote 1172 | 1173 | 1174 | 204 1175 | 00:12:29,526 --> 00:12:31,346 1176 | and drive growth for my app. 1177 | 1178 | 1179 | 205 1180 | 00:12:34,556 --> 00:12:37,566 1181 | My plan to promote 1182 | LiteRight is two pronged. 1183 | 1184 | 1185 | 206 1186 | 00:12:38,756 --> 00:12:43,786 1187 | First, I need to acquire 1188 | new users because with more 1189 | 1190 | 1191 | 207 1192 | 00:12:43,786 --> 00:12:47,326 1193 | than 1.5 million apps in the 1194 | App Store I need some way 1195 | 1196 | 1197 | 208 1198 | 00:12:47,326 --> 00:12:50,206 1199 | to make my app stand 1200 | out and be discovered. 1201 | 1202 | 1203 | 209 1204 | 00:12:50,776 --> 00:12:55,336 1205 | For that I'm going to actively 1206 | promote LiteRight and generate 1207 | 1208 | 1209 | 210 1210 | 00:12:55,336 --> 00:12:57,126 1211 | that awareness for my app. 1212 | 1213 | 1214 | 211 1215 | 00:12:58,176 --> 00:13:00,776 1216 | iAd has tools to help 1217 | me promote my app 1218 | 1219 | 1220 | 212 1221 | 00:13:01,006 --> 00:13:02,856 1222 | without any additional code. 1223 | 1224 | 1225 | 213 1226 | 00:13:03,686 --> 00:13:05,736 1227 | We'll show you how later 1228 | in the presentation. 1229 | 1230 | 1231 | 214 1232 | 00:13:06,276 --> 00:13:09,106 1233 | And what I've learned 1234 | from my experience 1235 | 1236 | 1237 | 215 1238 | 00:13:09,106 --> 00:13:12,306 1239 | with the other apps is 1240 | that I can't just focus 1241 | 1242 | 1243 | 216 1244 | 00:13:12,306 --> 00:13:13,726 1245 | on acquiring new users. 1246 | 1247 | 1248 | 217 1249 | 00:13:15,796 --> 00:13:19,056 1250 | I also need to engage 1251 | existing users 1252 | 1253 | 1254 | 218 1255 | 00:13:19,256 --> 00:13:23,396 1256 | who have already downloaded 1257 | because one in four apps 1258 | 1259 | 1260 | 219 1261 | 00:13:23,436 --> 00:13:25,696 1262 | that are downloaded 1263 | are never used. 1264 | 1265 | 1266 | 220 1267 | 00:13:26,676 --> 00:13:31,026 1268 | And only 32 percent of users 1269 | who download an app continue 1270 | 1271 | 1272 | 221 1273 | 00:13:31,026 --> 00:13:33,266 1274 | to use it after a week. 1275 | 1276 | 1277 | 222 1278 | 00:13:34,316 --> 00:13:37,296 1279 | To effectively reengage 1280 | users who have downloaded, 1281 | 1282 | 1283 | 223 1284 | 00:13:37,846 --> 00:13:40,516 1285 | I need to understand what 1286 | kind of users they are 1287 | 1288 | 1289 | 224 1290 | 00:13:41,406 --> 00:13:43,356 1291 | so I can tailor my 1292 | marketing messaging 1293 | 1294 | 1295 | 225 1296 | 00:13:43,356 --> 00:13:45,236 1297 | and target my ad 1298 | spend accordingly. 1299 | 1300 | 1301 | 226 1302 | 00:13:46,566 --> 00:13:49,716 1303 | And for that I'll need 1304 | to segment my users based 1305 | 1306 | 1307 | 227 1308 | 00:13:49,716 --> 00:13:52,106 1309 | on their behavior in my app. 1310 | 1311 | 1312 | 228 1313 | 00:13:52,896 --> 00:13:56,076 1314 | iAd lets me create several 1315 | hundred audience segments, 1316 | 1317 | 1318 | 229 1319 | 00:13:57,266 --> 00:14:01,076 1320 | but to start I'll group my 1321 | users into two custom segments. 1322 | 1323 | 1324 | 230 1325 | 00:14:02,466 --> 00:14:05,136 1326 | Dormant users, people 1327 | who have downloaded 1328 | 1329 | 1330 | 231 1331 | 00:14:05,136 --> 00:14:06,536 1332 | but are no longer active. 1333 | 1334 | 1335 | 232 1336 | 00:14:07,296 --> 00:14:10,196 1337 | For them I plan to 1338 | promote a special offer. 1339 | 1340 | 1341 | 233 1342 | 00:14:10,776 --> 00:14:14,456 1343 | And a starter pack 1344 | purchaser segment. 1345 | 1346 | 1347 | 234 1348 | 00:14:14,906 --> 00:14:17,496 1349 | These are users who have 1350 | purchased the filter starter 1351 | 1352 | 1353 | 235 1354 | 00:14:17,496 --> 00:14:18,226 1355 | pack in my app. 1356 | 1357 | 1358 | 236 1359 | 00:14:19,406 --> 00:14:22,626 1360 | For them I plan to promote 1361 | our platinum filter package. 1362 | 1363 | 1364 | 237 1365 | 00:14:23,226 --> 00:14:26,776 1366 | To create a custom 1367 | audience segment, 1368 | 1369 | 1370 | 238 1371 | 00:14:26,976 --> 00:14:30,266 1372 | let's look at how we integrate 1373 | the audience segmentation code 1374 | 1375 | 1376 | 239 1377 | 00:14:30,386 --> 00:14:34,376 1378 | into my app as part of 1379 | the next update to my app. 1380 | 1381 | 1382 | 240 1383 | 00:14:34,376 --> 00:14:37,266 1384 | And I'll use the starter pack 1385 | purchaser segment as my example. 1386 | 1387 | 1388 | 241 1389 | 00:14:37,796 --> 00:14:44,356 1390 | First, I'll check to see 1391 | if users have purchased one 1392 | 1393 | 1394 | 242 1395 | 00:14:44,356 --> 00:14:47,746 1396 | of my starter filters, which 1397 | means I want to add a them 1398 | 1399 | 1400 | 243 1401 | 00:14:47,746 --> 00:14:50,776 1402 | to the starter pack 1403 | purchasers audience segment. 1404 | 1405 | 1406 | 244 1407 | 00:14:50,886 --> 00:14:56,126 1408 | Then I need to get a 1409 | reference to the shared client. 1410 | 1411 | 1412 | 245 1413 | 00:14:57,436 --> 00:15:01,226 1414 | And next I'll need to tell 1415 | iAd which segment to add users 1416 | 1417 | 1418 | 246 1419 | 00:15:01,296 --> 00:15:03,806 1420 | to by keeping track of the users 1421 | 1422 | 1423 | 247 1424 | 00:15:03,806 --> 00:15:06,386 1425 | who have purchased my 1426 | starter filter pack. 1427 | 1428 | 1429 | 248 1430 | 00:15:07,596 --> 00:15:12,356 1431 | I can do this by calling the 1432 | 'add client to segments' method, 1433 | 1434 | 1435 | 249 1436 | 00:15:13,036 --> 00:15:14,886 1437 | which takes two arguments. 1438 | 1439 | 1440 | 250 1441 | 00:15:16,316 --> 00:15:20,376 1442 | The first is an array of 1443 | segment IDs which I got 1444 | 1445 | 1446 | 251 1447 | 00:15:20,496 --> 00:15:22,016 1448 | from the iAd WorkBench tool. 1449 | 1450 | 1451 | 252 1452 | 00:15:23,336 --> 00:15:26,026 1453 | If I attempt to send 1454 | some random segment IDs, 1455 | 1456 | 1457 | 253 1458 | 00:15:26,586 --> 00:15:27,586 1459 | those will be ignored. 1460 | 1461 | 1462 | 254 1463 | 00:15:27,756 --> 00:15:31,326 1464 | So I do have to get 1465 | these from iAd WorkBench. 1466 | 1467 | 1468 | 255 1469 | 00:15:31,326 --> 00:15:36,736 1470 | And we'll show you where 1471 | later during the demo. 1472 | 1473 | 1474 | 256 1475 | 00:15:36,896 --> 00:15:40,726 1476 | Second I'm going to set 1477 | 'replace existing' to false. 1478 | 1479 | 1480 | 257 1481 | 00:15:41,146 --> 00:15:43,176 1482 | Since I don't want 1483 | these users removed 1484 | 1485 | 1486 | 258 1487 | 00:15:43,256 --> 00:15:48,376 1488 | from any other existing 1489 | segments they may already be in. 1490 | 1491 | 1492 | 259 1493 | 00:15:48,606 --> 00:15:50,676 1494 | Now that I've done the 1495 | appropriate prep work 1496 | 1497 | 1498 | 260 1499 | 00:15:50,676 --> 00:15:54,226 1500 | to segment my users, 1501 | I'm ready to execute 1502 | 1503 | 1504 | 261 1505 | 00:15:54,326 --> 00:15:56,136 1506 | on my promotion plan 1507 | for LiteRight. 1508 | 1509 | 1510 | 262 1511 | 00:15:57,296 --> 00:15:59,796 1512 | And for that I'll 1513 | use iAd WorkBench, 1514 | 1515 | 1516 | 263 1517 | 00:16:00,936 --> 00:16:04,536 1518 | iAd's self-service 1519 | campaign management tool. 1520 | 1521 | 1522 | 264 1523 | 00:16:05,116 --> 00:16:10,146 1524 | It gives me full control 1525 | to create, manage, 1526 | 1527 | 1528 | 265 1529 | 00:16:10,216 --> 00:16:12,796 1530 | and optimize my app 1531 | promotion campaigns 1532 | 1533 | 1534 | 266 1535 | 00:16:13,456 --> 00:16:15,456 1536 | and gives access 1537 | to full reporting. 1538 | 1539 | 1540 | 267 1541 | 00:16:19,056 --> 00:16:22,396 1542 | Here you can see I've already 1543 | created a few campaigns 1544 | 1545 | 1546 | 268 1547 | 00:16:22,656 --> 00:16:27,716 1548 | to execute on my promotional 1549 | plan to acquire new users 1550 | 1551 | 1552 | 269 1553 | 00:16:27,866 --> 00:16:29,656 1554 | and to re-engage dormant users. 1555 | 1556 | 1557 | 270 1558 | 00:16:30,186 --> 00:16:33,036 1559 | Next we'll use iAd WorkBench 1560 | 1561 | 1562 | 271 1563 | 00:16:33,236 --> 00:16:37,066 1564 | to retarget my starter pack 1565 | purchaser audience segment 1566 | 1567 | 1568 | 272 1569 | 00:16:37,316 --> 00:16:39,536 1570 | to promote my platinum 1571 | filter package. 1572 | 1573 | 1574 | 273 1575 | 00:16:40,336 --> 00:16:43,436 1576 | For this campaign we are going 1577 | to drive users from the tap 1578 | 1579 | 1580 | 274 1581 | 00:16:43,946 --> 00:16:47,476 1582 | of an ad directly into 1583 | the page in my app 1584 | 1585 | 1586 | 275 1587 | 00:16:48,046 --> 00:16:49,716 1588 | where they can make 1589 | that in-app purchase. 1590 | 1591 | 1592 | 276 1593 | 00:16:51,196 --> 00:16:53,566 1594 | And I'll hand it over to 1595 | Shashank for that demo. 1596 | 1597 | 1598 | 277 1599 | 00:16:55,516 --> 00:16:59,696 1600 | [Applause] 1601 | 1602 | 1603 | 278 1604 | 00:17:00,196 --> 00:17:01,006 1605 | Thank you. 1606 | 1607 | 1608 | 279 1609 | 00:17:02,386 --> 00:17:02,986 1610 | >> SHASHANK PHADKE: 1611 | Thanks, Carol. 1612 | 1613 | 1614 | 280 1615 | 00:17:02,986 --> 00:17:05,136 1616 | Good morning, everybody. 1617 | 1618 | 1619 | 281 1620 | 00:17:05,136 --> 00:17:07,705 1621 | My name is Shashank Phadke, 1622 | and I'm with the iAd team. 1623 | 1624 | 1625 | 282 1626 | 00:17:09,006 --> 00:17:12,876 1627 | Today I'm going to show you two 1628 | awesome things in iAd WorkBench. 1629 | 1630 | 1631 | 283 1632 | 00:17:13,746 --> 00:17:16,256 1633 | First I'm going to show 1634 | you where you can view 1635 | 1636 | 1637 | 284 1638 | 00:17:16,256 --> 00:17:18,236 1639 | and manage your audience 1640 | segments. 1641 | 1642 | 1643 | 285 1644 | 00:17:19,576 --> 00:17:23,136 1645 | And number two, I am going 1646 | to show you how easy it is 1647 | 1648 | 1649 | 286 1650 | 00:17:23,136 --> 00:17:26,656 1651 | to create a retargeting 1652 | campaign using one 1653 | 1654 | 1655 | 287 1656 | 00:17:26,656 --> 00:17:27,746 1657 | of those audience segments. 1658 | 1659 | 1660 | 288 1661 | 00:17:28,576 --> 00:17:29,456 1662 | So let's get started. 1663 | 1664 | 1665 | 289 1666 | 00:17:38,856 --> 00:17:42,046 1667 | When I log into iAd 1668 | WorkBench I see my dashboard. 1669 | 1670 | 1671 | 290 1672 | 00:17:42,976 --> 00:17:48,016 1673 | This is where you see all your 1674 | campaigns across all your apps. 1675 | 1676 | 1677 | 291 1678 | 00:17:49,076 --> 00:17:51,446 1679 | To view your audience segments, 1680 | 1681 | 1682 | 292 1683 | 00:17:52,076 --> 00:17:55,676 1684 | you go to the 'my audiences' 1685 | page using the dropdown 1686 | 1687 | 1688 | 293 1689 | 00:17:55,786 --> 00:17:57,516 1690 | on the right side of the page. 1691 | 1692 | 1693 | 294 1694 | 00:17:58,896 --> 00:18:01,906 1695 | Here on the 'my audiences' page, 1696 | 1697 | 1698 | 295 1699 | 00:18:02,816 --> 00:18:04,786 1700 | you see all the audience 1701 | segments 1702 | 1703 | 1704 | 296 1705 | 00:18:05,186 --> 00:18:08,486 1706 | that you have defined 1707 | across your apps. 1708 | 1709 | 1710 | 297 1711 | 00:18:09,876 --> 00:18:12,406 1712 | For every audience 1713 | segment you create, 1714 | 1715 | 1716 | 298 1717 | 00:18:12,946 --> 00:18:16,766 1718 | iAd WorkBench assigns 1719 | you a unique segment ID. 1720 | 1721 | 1722 | 299 1723 | 00:18:17,346 --> 00:18:19,586 1724 | Like for example, 1725 | 1726 | 1727 | 300 1728 | 00:18:19,676 --> 00:18:22,016 1729 | for my LiteRight 1730 | starter pack purchases, 1731 | 1732 | 1733 | 301 1734 | 00:18:22,366 --> 00:18:25,576 1735 | this is the Segment ID 1736 | iAd WorkBench gave me. 1737 | 1738 | 1739 | 302 1740 | 00:18:26,796 --> 00:18:31,256 1741 | This is the ID you use in 1742 | your code to instrument 1743 | 1744 | 1745 | 303 1746 | 00:18:31,546 --> 00:18:34,176 1747 | and start adding 1748 | users to that segment. 1749 | 1750 | 1751 | 304 1752 | 00:18:34,226 --> 00:18:38,826 1753 | Because of that instrumentation 1754 | I can see that there are 1755 | 1756 | 1757 | 305 1758 | 00:18:38,826 --> 00:18:42,266 1759 | about 10,000 plus users already 1760 | 1761 | 1762 | 306 1763 | 00:18:42,346 --> 00:18:45,176 1764 | in my starter pack 1765 | purchases segment. 1766 | 1767 | 1768 | 307 1769 | 00:18:45,626 --> 00:18:52,626 1770 | Now, of course this number 1771 | will keep on updating as more 1772 | 1773 | 1774 | 308 1775 | 00:18:52,626 --> 00:18:56,186 1776 | and more users download 1777 | my starter pack. 1778 | 1779 | 1780 | 309 1781 | 00:18:57,576 --> 00:19:01,046 1782 | Now let's see how we 1783 | can use this segment 1784 | 1785 | 1786 | 310 1787 | 00:19:01,576 --> 00:19:07,486 1788 | to create a retargeting campaign 1789 | for my new platinum filter pack. 1790 | 1791 | 1792 | 311 1793 | 00:19:09,216 --> 00:19:14,436 1794 | To do that, I go back to 1795 | the dashboard and click 1796 | 1797 | 1798 | 312 1799 | 00:19:14,506 --> 00:19:18,216 1800 | on the 'create campaign' 1801 | button to start the campaign. 1802 | 1803 | 1804 | 313 1805 | 00:19:18,746 --> 00:19:25,386 1806 | I get to choose if I want to 1807 | promote an app or a product. 1808 | 1809 | 1810 | 314 1811 | 00:19:25,966 --> 00:19:27,546 1812 | In this case I'm 1813 | promoting my app. 1814 | 1815 | 1816 | 315 1817 | 00:19:27,546 --> 00:19:29,146 1818 | So I select "app." 1819 | 1820 | 1821 | 316 1822 | 00:19:29,996 --> 00:19:33,556 1823 | As you can see, all my 1824 | apps are already listed. 1825 | 1826 | 1827 | 317 1828 | 00:19:34,616 --> 00:19:36,656 1829 | I choose LiteRight 1830 | for this campaign. 1831 | 1832 | 1833 | 318 1834 | 00:19:37,226 --> 00:19:41,706 1835 | Then I get to choose if I want 1836 | to promote and run this ad 1837 | 1838 | 1839 | 319 1840 | 00:19:41,706 --> 00:19:45,456 1841 | on the app network 1842 | or on iTunes Radio. 1843 | 1844 | 1845 | 320 1846 | 00:19:46,536 --> 00:19:51,266 1847 | I choose app network and I also 1848 | see that my ad will be running 1849 | 1850 | 1851 | 321 1852 | 00:19:51,266 --> 00:19:57,146 1853 | in more than 100 countries 1854 | where I already support it. 1855 | 1856 | 1857 | 322 1858 | 00:19:57,416 --> 00:19:59,376 1859 | Next I choose my bid type. 1860 | 1861 | 1862 | 323 1863 | 00:20:00,906 --> 00:20:04,726 1864 | CPC, which is cost 1865 | per click, or CPM, 1866 | 1867 | 1868 | 324 1869 | 00:20:05,436 --> 00:20:07,456 1870 | which is cost per 1871 | thousand impressions. 1872 | 1873 | 1874 | 325 1875 | 00:20:08,816 --> 00:20:13,446 1876 | For this campaign, since I want 1877 | to pay only when the user clicks 1878 | 1879 | 1880 | 326 1881 | 00:20:13,446 --> 00:20:15,546 1882 | on my banner, I will choose CPC. 1883 | 1884 | 1885 | 327 1886 | 00:20:17,266 --> 00:20:21,256 1887 | Let's name this campaign. 1888 | 1889 | 1890 | 328 1891 | 00:20:21,986 --> 00:20:25,456 1892 | LiteRight platinum campaign. 1893 | 1894 | 1895 | 329 1896 | 00:20:28,876 --> 00:20:32,886 1897 | Next I see a list of 1898 | lines in the campaign. 1899 | 1900 | 1901 | 330 1902 | 00:20:33,406 --> 00:20:34,386 1903 | I don't have any. 1904 | 1905 | 1906 | 331 1907 | 00:20:35,166 --> 00:20:37,746 1908 | So let me show you what 1909 | it takes to create a line. 1910 | 1911 | 1912 | 332 1913 | 00:20:38,406 --> 00:20:40,616 1914 | Click on the 'create 1915 | line' button. 1916 | 1917 | 1918 | 333 1919 | 00:20:41,436 --> 00:20:46,906 1920 | First I choose which country 1921 | I want to run this ad. 1922 | 1923 | 1924 | 334 1925 | 00:20:47,126 --> 00:20:53,046 1926 | I choose U.S. And now for my 1927 | platinum filter pack I want 1928 | 1929 | 1930 | 335 1931 | 00:20:53,046 --> 00:20:55,936 1932 | to specifically target the users 1933 | 1934 | 1935 | 336 1936 | 00:20:56,016 --> 00:20:58,456 1937 | who have already 1938 | downloaded my starter pack. 1939 | 1940 | 1941 | 337 1942 | 00:20:59,746 --> 00:21:04,476 1943 | In this case I will select my 1944 | retargeting option to be 'yes.' 1945 | 1946 | 1947 | 338 1948 | 00:21:05,356 --> 00:21:12,116 1949 | As you can see, all my audience 1950 | segments are listed over here. 1951 | 1952 | 1953 | 339 1954 | 00:21:12,966 --> 00:21:16,036 1955 | This was the same view which we 1956 | saw in the 'my audiences' page. 1957 | 1958 | 1959 | 340 1960 | 00:21:17,056 --> 00:21:19,976 1961 | For this campaign 1962 | I want to reach 1963 | 1964 | 1965 | 341 1966 | 00:21:19,976 --> 00:21:22,586 1967 | out to this 10,000 1968 | plus LiteRight starter 1969 | 1970 | 1971 | 342 1972 | 00:21:22,586 --> 00:21:23,556 1973 | pack purchases. 1974 | 1975 | 1976 | 343 1977 | 00:21:23,556 --> 00:21:25,166 1978 | So I will select that. 1979 | 1980 | 1981 | 344 1982 | 00:21:26,676 --> 00:21:29,266 1983 | In addition to the 1984 | audience segment, 1985 | 1986 | 1987 | 345 1988 | 00:21:29,966 --> 00:21:32,896 1989 | I can choose other 1990 | targeting dimensions. 1991 | 1992 | 1993 | 346 1994 | 00:21:34,026 --> 00:21:37,426 1995 | Like, for example, if 1996 | I want my ad to run 1997 | 1998 | 1999 | 347 2000 | 00:21:37,426 --> 00:21:40,276 2001 | on specific devices, 2002 | iPhone or iPad. 2003 | 2004 | 2005 | 348 2006 | 00:21:40,856 --> 00:21:46,756 2007 | Or I could choose different 2008 | U.S. or user geographies, 2009 | 2010 | 2011 | 349 2012 | 00:21:48,186 --> 00:21:51,586 2013 | or I can have a dimension 2014 | of app channels, 2015 | 2016 | 2017 | 350 2018 | 00:21:52,286 --> 00:21:54,626 2019 | which is the iTunes 2020 | category of the apps, 2021 | 2022 | 2023 | 351 2024 | 00:21:54,956 --> 00:21:59,096 2025 | I want the ad to run on. 2026 | 2027 | 2028 | 352 2029 | 00:21:59,096 --> 00:22:01,886 2030 | Or I could schedule my ad 2031 | to run on a particular time 2032 | 2033 | 2034 | 353 2035 | 00:22:01,886 --> 00:22:05,796 2036 | of the day or days of the week. 2037 | 2038 | 2039 | 354 2040 | 00:22:05,796 --> 00:22:08,476 2041 | After selecting all the 2042 | targeting dimensions I can see 2043 | 2044 | 2045 | 355 2046 | 00:22:08,476 --> 00:22:12,976 2047 | that I can reach up to 10,000 2048 | plus users which is more 2049 | 2050 | 2051 | 356 2052 | 00:22:12,976 --> 00:22:16,836 2053 | than the minimum 6,000 required 2054 | for a retargeting campaign. 2055 | 2056 | 2057 | 357 2058 | 00:22:17,146 --> 00:22:20,056 2059 | So I'm good. 2060 | 2061 | 2062 | 358 2063 | 00:22:20,256 --> 00:22:21,866 2064 | Next I choose my ad type. 2065 | 2066 | 2067 | 359 2068 | 00:22:21,926 --> 00:22:23,636 2069 | It is going to be a banner. 2070 | 2071 | 2072 | 360 2073 | 00:22:24,506 --> 00:22:26,496 2074 | And I'm going to choose 2075 | a destination type 2076 | 2077 | 2078 | 361 2079 | 00:22:26,696 --> 00:22:27,986 2080 | of ad deep link. 2081 | 2082 | 2083 | 362 2084 | 00:22:28,936 --> 00:22:31,436 2085 | I'll tell you about this 2086 | ad deep link destination 2087 | 2088 | 2089 | 363 2090 | 00:22:31,506 --> 00:22:32,626 2091 | on the next screen. 2092 | 2093 | 2094 | 364 2095 | 00:22:33,516 --> 00:22:36,976 2096 | I choose my flight 2097 | dates, let it be running 2098 | 2099 | 2100 | 365 2101 | 00:22:36,976 --> 00:22:38,276 2102 | from tomorrow for a month. 2103 | 2104 | 2105 | 366 2106 | 00:22:38,906 --> 00:22:42,796 2107 | And then for the campaign 2108 | I define my budget. 2109 | 2110 | 2111 | 367 2112 | 00:22:44,006 --> 00:22:46,576 2113 | I would like to spend, 2114 | say, $3,000. 2115 | 2116 | 2117 | 368 2118 | 00:22:47,166 --> 00:22:51,496 2119 | And then I put in my CPC bid. 2120 | 2121 | 2122 | 369 2123 | 00:22:51,716 --> 00:22:54,016 2124 | Say, 50 cents. 2125 | 2126 | 2127 | 370 2128 | 00:22:54,276 --> 00:22:56,676 2129 | Now, iAd is an auction-based 2130 | marketplace. 2131 | 2132 | 2133 | 371 2134 | 00:22:57,536 --> 00:23:00,276 2135 | So I know for sure I 2136 | won't be paying any more 2137 | 2138 | 2139 | 372 2140 | 00:23:00,456 --> 00:23:01,586 2141 | than the 50 cents. 2142 | 2143 | 2144 | 373 2145 | 00:23:02,616 --> 00:23:06,256 2146 | In fact, I could be paying less. 2147 | 2148 | 2149 | 374 2150 | 00:23:06,256 --> 00:23:13,096 2151 | Let's name the line. 2152 | 2153 | 2154 | 375 2155 | 00:23:13,296 --> 00:23:19,226 2156 | Once I have defined the line on 2157 | the next screen, I see a list 2158 | 2159 | 2160 | 376 2161 | 00:23:19,226 --> 00:23:22,486 2162 | of all the lines I have 2163 | defined for this campaign. 2164 | 2165 | 2166 | 377 2167 | 00:23:23,206 --> 00:23:24,876 2168 | You can define more 2169 | lines if you want, 2170 | 2171 | 2172 | 378 2173 | 00:23:25,396 --> 00:23:27,726 2174 | but for now let's 2175 | leave it at one line. 2176 | 2177 | 2178 | 379 2179 | 00:23:29,246 --> 00:23:33,706 2180 | Click on "next" to 2181 | start creating your ad. 2182 | 2183 | 2184 | 380 2185 | 00:23:36,096 --> 00:23:39,996 2186 | Now, to define an ad you are 2187 | going to define your pre-tap 2188 | 2189 | 2190 | 381 2191 | 00:23:40,406 --> 00:23:41,706 2192 | and post-tap experience. 2193 | 2194 | 2195 | 382 2196 | 00:23:42,956 --> 00:23:46,096 2197 | For my ad, I want it to be 2198 | a banner before tapping; 2199 | 2200 | 2201 | 383 2202 | 00:23:46,786 --> 00:23:50,976 2203 | I want my ad to run on all 2204 | devices, iPhones, iPads, 2205 | 2206 | 2207 | 384 2208 | 00:23:51,126 --> 00:23:52,426 2209 | so I will choose universal. 2210 | 2211 | 2212 | 385 2213 | 00:23:52,956 --> 00:23:55,416 2214 | I choose my language. 2215 | 2216 | 2217 | 386 2218 | 00:23:56,056 --> 00:24:03,256 2219 | And for the creative, I can 2220 | use a standard set of templates 2221 | 2222 | 2223 | 387 2224 | 00:24:03,256 --> 00:24:07,296 2225 | that iAd WorkBench provides 2226 | me with various color schemes. 2227 | 2228 | 2229 | 388 2230 | 00:24:08,566 --> 00:24:11,606 2231 | Or if I want I can upload 2232 | images from my desktop. 2233 | 2234 | 2235 | 389 2236 | 00:24:12,766 --> 00:24:15,726 2237 | For now, let's quickly 2238 | use a standard template. 2239 | 2240 | 2241 | 390 2242 | 00:24:16,396 --> 00:24:29,636 2243 | I can give it a title, a message 2244 | for my new platinum pack, 2245 | 2246 | 2247 | 391 2248 | 00:24:31,256 --> 00:24:32,826 2249 | and a call to action text. 2250 | 2251 | 2252 | 392 2253 | 00:24:33,716 --> 00:24:39,866 2254 | As you can see, I get to see 2255 | the preview of how this is going 2256 | 2257 | 2258 | 393 2259 | 00:24:39,866 --> 00:24:42,226 2260 | to look on the devices. 2261 | 2262 | 2263 | 394 2264 | 00:24:42,556 --> 00:24:45,216 2265 | In fact, I can get a preview 2266 | of how it is going to look 2267 | 2268 | 2269 | 395 2270 | 00:24:45,216 --> 00:24:47,276 2271 | across all different devices. 2272 | 2273 | 2274 | 396 2275 | 00:24:50,996 --> 00:24:54,806 2276 | Now I want to choose what the 2277 | post-tap experience I want 2278 | 2279 | 2280 | 397 2281 | 00:24:54,806 --> 00:24:55,386 2282 | for the user. 2283 | 2284 | 2285 | 398 2286 | 00:24:56,096 --> 00:24:59,506 2287 | I am going to choose 2288 | ad deep link. 2289 | 2290 | 2291 | 399 2292 | 00:25:00,216 --> 00:25:02,756 2293 | Because in this case 2294 | for my platinum pack, 2295 | 2296 | 2297 | 400 2298 | 00:25:03,346 --> 00:25:07,116 2299 | every time the user clicks 2300 | on the banner, I want my app 2301 | 2302 | 2303 | 401 2304 | 00:25:07,626 --> 00:25:12,156 2305 | to open up on the device 2306 | and take the user directly 2307 | 2308 | 2309 | 402 2310 | 00:25:12,316 --> 00:25:15,436 2311 | into the page where 2312 | they can do the purchase 2313 | 2314 | 2315 | 403 2316 | 00:25:15,436 --> 00:25:19,866 2317 | of my platinum filter 2318 | pack, in-app purchase. 2319 | 2320 | 2321 | 404 2322 | 00:25:20,006 --> 00:25:24,436 2323 | In order to configure that, I 2324 | need to put in a deep link URL. 2325 | 2326 | 2327 | 405 2328 | 00:25:25,006 --> 00:25:32,556 2329 | I put in my custom scheme 2330 | and for filters, where I want 2331 | 2332 | 2333 | 406 2334 | 00:25:32,556 --> 00:25:37,186 2335 | to go directly to the page where 2336 | I can do an in-app purchase 2337 | 2338 | 2339 | 407 2340 | 00:25:37,646 --> 00:25:40,606 2341 | of the platinum filter pack. 2342 | 2343 | 2344 | 408 2345 | 00:25:40,806 --> 00:25:42,986 2346 | Now, most of the time 2347 | my app will be installed 2348 | 2349 | 2350 | 409 2351 | 00:25:42,986 --> 00:25:44,296 2352 | on the device of the user. 2353 | 2354 | 2355 | 410 2356 | 00:25:44,656 --> 00:25:47,856 2357 | But for some reason if 2358 | the app is not installed 2359 | 2360 | 2361 | 411 2362 | 00:25:48,286 --> 00:25:52,756 2363 | and after the user clicks on the 2364 | banner, I can take them directly 2365 | 2366 | 2367 | 412 2368 | 00:25:52,756 --> 00:25:56,906 2369 | to the iTunes App Store 2370 | page to re-download the app. 2371 | 2372 | 2373 | 413 2374 | 00:25:57,806 --> 00:26:00,076 2375 | Or if I want to take 2376 | them to another website 2377 | 2378 | 2379 | 414 2380 | 00:26:00,076 --> 00:26:02,006 2381 | of my choosing, I 2382 | could do that, too. 2383 | 2384 | 2385 | 415 2386 | 00:26:02,806 --> 00:26:10,046 2387 | For now I want to take 2388 | them to the download page. 2389 | 2390 | 2391 | 416 2392 | 00:26:10,736 --> 00:26:13,886 2393 | I will name the destination. 2394 | 2395 | 2396 | 417 2397 | 00:26:13,886 --> 00:26:14,746 2398 | LiteRight deep link. 2399 | 2400 | 2401 | 418 2402 | 00:26:16,036 --> 00:26:18,956 2403 | I associate the line which 2404 | I created to this ad. 2405 | 2406 | 2407 | 419 2408 | 00:26:20,456 --> 00:26:26,306 2409 | And name the ad. 2410 | 2411 | 2412 | 420 2413 | 00:26:26,876 --> 00:26:27,816 2414 | Click "next." 2415 | 2416 | 2417 | 421 2418 | 00:26:32,216 --> 00:26:35,366 2419 | On the next screen, you 2420 | get to see all the ads 2421 | 2422 | 2423 | 422 2424 | 00:26:35,456 --> 00:26:37,116 2425 | that you have created 2426 | for this campaign. 2427 | 2428 | 2429 | 423 2430 | 00:26:37,486 --> 00:26:38,656 2431 | We just created this ad. 2432 | 2433 | 2434 | 424 2435 | 00:26:39,366 --> 00:26:42,416 2436 | Again, you could create 2437 | more ads if you want to. 2438 | 2439 | 2440 | 425 2441 | 00:26:43,346 --> 00:26:47,016 2442 | But for now, let's 2443 | keep it at one. 2444 | 2445 | 2446 | 426 2447 | 00:26:47,136 --> 00:26:50,516 2448 | Click "next" to see the 2449 | summary of all the campaign set 2450 | 2451 | 2452 | 427 2453 | 00:26:50,516 --> 00:26:51,796 2454 | up you have done so far. 2455 | 2456 | 2457 | 428 2458 | 00:26:52,776 --> 00:26:54,396 2459 | I can see the line I created. 2460 | 2461 | 2462 | 429 2463 | 00:26:54,926 --> 00:26:57,726 2464 | I can see the ads which I 2465 | associated with the line. 2466 | 2467 | 2468 | 430 2469 | 00:26:58,506 --> 00:27:02,136 2470 | I can also enter my 2471 | payment information. 2472 | 2473 | 2474 | 431 2475 | 00:27:02,766 --> 00:27:05,216 2476 | Since iAd WorkBench, when 2477 | I signed up for that, 2478 | 2479 | 2480 | 432 2481 | 00:27:05,326 --> 00:27:09,606 2482 | already has my credit card, 2483 | I'm going to use just that. 2484 | 2485 | 2486 | 433 2487 | 00:27:10,296 --> 00:27:10,676 2488 | That's it. 2489 | 2490 | 2491 | 434 2492 | 00:27:10,676 --> 00:27:17,236 2493 | At this point of time, I go 2494 | and submit this campaign. 2495 | 2496 | 2497 | 435 2498 | 00:27:17,366 --> 00:27:19,026 2499 | Once you submit the campaign, 2500 | 2501 | 2502 | 436 2503 | 00:27:19,786 --> 00:27:22,636 2504 | all the ads that 2505 | you have created go 2506 | 2507 | 2508 | 437 2509 | 00:27:22,636 --> 00:27:24,296 2510 | through a certification process. 2511 | 2512 | 2513 | 438 2514 | 00:27:25,106 --> 00:27:27,546 2515 | And once they are all approved, 2516 | 2517 | 2518 | 439 2519 | 00:27:28,476 --> 00:27:31,186 2520 | and your line start 2521 | date is reached, 2522 | 2523 | 2524 | 440 2525 | 00:27:31,756 --> 00:27:33,226 2526 | your campaign will start running 2527 | 2528 | 2529 | 441 2530 | 00:27:33,656 --> 00:27:38,736 2531 | and your ads will start 2532 | serving on the devices. 2533 | 2534 | 2535 | 442 2536 | 00:27:38,836 --> 00:27:41,276 2537 | Now, let me show you after 2538 | you created a campaign, 2539 | 2540 | 2541 | 443 2542 | 00:27:41,766 --> 00:27:44,556 2543 | how do you monitor the 2544 | performance of your campaign? 2545 | 2546 | 2547 | 444 2548 | 00:27:46,196 --> 00:27:50,516 2549 | I recently ran a similar 2550 | campaign which just finished. 2551 | 2552 | 2553 | 445 2554 | 00:27:50,516 --> 00:27:55,086 2555 | So let me click on the analytics 2556 | section of the campaign card 2557 | 2558 | 2559 | 446 2560 | 00:27:55,736 --> 00:28:08,866 2561 | to go to the analytics, to 2562 | the analytics dashboard page. 2563 | 2564 | 2565 | 447 2566 | 00:28:10,156 --> 00:28:15,186 2567 | Here you can see for the 2568 | campaign, various metrics. 2569 | 2570 | 2571 | 448 2572 | 00:28:16,296 --> 00:28:18,376 2573 | The total spent, the 2574 | total impressions, 2575 | 2576 | 2577 | 449 2578 | 00:28:18,936 --> 00:28:23,016 2579 | the total conversions, 2580 | all those things. 2581 | 2582 | 2583 | 450 2584 | 00:28:23,176 --> 00:28:27,426 2585 | I can also slice and dice 2586 | this data by filtering 2587 | 2588 | 2589 | 451 2590 | 00:28:27,426 --> 00:28:28,946 2591 | by a particular date range. 2592 | 2593 | 2594 | 452 2595 | 00:28:29,596 --> 00:28:33,336 2596 | Or I can view the data 2597 | at the campaign level 2598 | 2599 | 2600 | 453 2601 | 00:28:33,716 --> 00:28:37,506 2602 | or at the line level, 2603 | even at the ad level 2604 | 2605 | 2606 | 454 2607 | 00:28:37,506 --> 00:28:38,826 2608 | or the device type level. 2609 | 2610 | 2611 | 455 2612 | 00:28:39,356 --> 00:28:46,406 2613 | In the graph which you see I can 2614 | plot a particular metric, like, 2615 | 2616 | 2617 | 456 2618 | 00:28:46,406 --> 00:28:51,376 2619 | for example, the spend per day 2620 | across my campaign time period. 2621 | 2622 | 2623 | 457 2624 | 00:28:52,336 --> 00:28:55,666 2625 | Or I can also overlay 2626 | with other metrics. 2627 | 2628 | 2629 | 458 2630 | 00:28:55,966 --> 00:28:59,276 2631 | For example, impressions 2632 | over time. 2633 | 2634 | 2635 | 459 2636 | 00:28:59,996 --> 00:29:03,236 2637 | Or taps over time. 2638 | 2639 | 2640 | 460 2641 | 00:29:03,456 --> 00:29:07,116 2642 | If I prefer to do all the 2643 | slicing and dicing offline, 2644 | 2645 | 2646 | 461 2647 | 00:29:07,676 --> 00:29:16,656 2648 | I can always download this data 2649 | using the download icon here. 2650 | 2651 | 2652 | 462 2653 | 00:29:16,876 --> 00:29:18,646 2654 | All this UI functionality 2655 | 2656 | 2657 | 463 2658 | 00:29:19,226 --> 00:29:25,586 2659 | and analytics reporting I can 2660 | also use the iAd's advertising 2661 | 2662 | 2663 | 464 2664 | 00:29:25,586 --> 00:29:27,956 2665 | API if I prefer so. 2666 | 2667 | 2668 | 465 2669 | 00:29:28,896 --> 00:29:31,616 2670 | There are so many other things 2671 | you can do with iAd WorkBench, 2672 | 2673 | 2674 | 466 2675 | 00:29:32,206 --> 00:29:35,586 2676 | but for now I will 2677 | hand it back to Carol. 2678 | 2679 | 2680 | 467 2681 | 00:29:35,736 --> 00:29:35,946 2682 | Carol? 2683 | 2684 | 2685 | 468 2686 | 00:29:36,516 --> 00:29:42,736 2687 | [Applause] 2688 | 2689 | 2690 | 469 2691 | 00:29:43,236 --> 00:29:44,146 2692 | >> CAROL TENG: Thanks, Shashank. 2693 | 2694 | 2695 | 470 2696 | 00:29:44,146 --> 00:29:46,876 2697 | As you can see from that demo 2698 | 2699 | 2700 | 471 2701 | 00:29:46,876 --> 00:29:50,656 2702 | of iAd WorkBench I have 2703 | full control to set up 2704 | 2705 | 2706 | 472 2707 | 00:29:50,656 --> 00:29:52,606 2708 | and run campaigns 2709 | to promote my app 2710 | 2711 | 2712 | 473 2713 | 00:29:53,676 --> 00:29:56,506 2714 | and in the reporting screens I 2715 | can see how well my campaigns 2716 | 2717 | 2718 | 474 2719 | 00:29:56,506 --> 00:29:56,996 2720 | are doing. 2721 | 2722 | 2723 | 475 2724 | 00:29:58,346 --> 00:30:01,036 2725 | Not only can I do this 2726 | inside of iAd WorkBench, 2727 | 2728 | 2729 | 476 2730 | 00:30:01,726 --> 00:30:04,836 2731 | but I can also use 2732 | iAd's attribution API 2733 | 2734 | 2735 | 477 2736 | 00:30:05,616 --> 00:30:08,326 2737 | to measure the effectiveness 2738 | and track app downloads 2739 | 2740 | 2741 | 478 2742 | 00:30:08,376 --> 00:30:10,426 2743 | that originated from 2744 | iAd campaigns. 2745 | 2746 | 2747 | 479 2748 | 00:30:11,136 --> 00:30:15,676 2749 | It is a method of the AD 2750 | client class called 'look 2751 | 2752 | 2753 | 480 2754 | 00:30:15,676 --> 00:30:19,106 2755 | up ad conversion details,' 2756 | which returns two dates. 2757 | 2758 | 2759 | 481 2760 | 00:30:19,676 --> 00:30:24,426 2761 | The first is the app download 2762 | date, which is the date 2763 | 2764 | 2765 | 482 2766 | 00:30:24,536 --> 00:30:26,586 2767 | that the user downloaded 2768 | the app. 2769 | 2770 | 2771 | 483 2772 | 00:30:28,436 --> 00:30:30,546 2773 | The second is the 2774 | last click date, 2775 | 2776 | 2777 | 484 2778 | 00:30:30,546 --> 00:30:33,566 2779 | and this would be the last 2780 | date that the user clicked 2781 | 2782 | 2783 | 485 2784 | 00:30:33,566 --> 00:30:37,726 2785 | on the ad prior to the 2786 | purchase of the app. 2787 | 2788 | 2789 | 486 2790 | 00:30:37,986 --> 00:30:40,576 2791 | If both of these dates 2792 | are there and true, 2793 | 2794 | 2795 | 487 2796 | 00:30:40,576 --> 00:30:44,686 2797 | that means this app download 2798 | is directly attributable 2799 | 2800 | 2801 | 488 2802 | 00:30:44,746 --> 00:30:47,956 2803 | to the user interacting 2804 | with and clicking on an iAd 2805 | 2806 | 2807 | 489 2808 | 00:30:48,356 --> 00:30:50,286 2809 | that is promoting my app. 2810 | 2811 | 2812 | 490 2813 | 00:30:52,836 --> 00:30:53,896 2814 | So that's it. 2815 | 2816 | 2817 | 491 2818 | 00:30:54,676 --> 00:30:57,886 2819 | Over this imaginary 2820 | journey of developing 2821 | 2822 | 2823 | 492 2824 | 00:30:57,886 --> 00:31:01,176 2825 | and launching the LiteRight 2826 | app, I hope you've seen how 2827 | 2828 | 2829 | 493 2830 | 00:31:01,176 --> 00:31:03,606 2831 | to apply the best 2832 | practices of some 2833 | 2834 | 2835 | 494 2836 | 00:31:03,606 --> 00:31:05,746 2837 | of the most successful 2838 | app developers. 2839 | 2840 | 2841 | 495 2842 | 00:31:06,326 --> 00:31:11,476 2843 | Even as early as the design 2844 | phase, they are already thinking 2845 | 2846 | 2847 | 496 2848 | 00:31:11,476 --> 00:31:13,786 2849 | about the business model 2850 | and how they are going 2851 | 2852 | 2853 | 497 2854 | 00:31:13,786 --> 00:31:15,866 2855 | to monetize their app. 2856 | 2857 | 2858 | 498 2859 | 00:31:16,896 --> 00:31:20,786 2860 | And with just a few lines of 2861 | code, you saw how easy it was 2862 | 2863 | 2864 | 499 2865 | 00:31:20,896 --> 00:31:22,776 2866 | to integrate iAd into your app 2867 | 2868 | 2869 | 500 2870 | 00:31:23,746 --> 00:31:27,316 2871 | and start generating revenue 2872 | even as early as launch. 2873 | 2874 | 2875 | 501 2876 | 00:31:27,846 --> 00:31:33,236 2877 | Then we talked about the best 2878 | practices for growing your app 2879 | 2880 | 2881 | 502 2882 | 00:31:33,526 --> 00:31:36,496 2883 | by investing wisely to 2884 | promote to your users, 2885 | 2886 | 2887 | 503 2888 | 00:31:37,436 --> 00:31:41,196 2889 | how to instrument your app to 2890 | identify and segment your users 2891 | 2892 | 2893 | 504 2894 | 00:31:41,786 --> 00:31:44,556 2895 | so you can better understand 2896 | the various audiences 2897 | 2898 | 2899 | 505 2900 | 00:31:44,556 --> 00:31:45,696 2901 | that you are trying to address. 2902 | 2903 | 2904 | 506 2905 | 00:31:46,296 --> 00:31:50,226 2906 | How to target them 2907 | with relevant messaging 2908 | 2909 | 2910 | 507 2911 | 00:31:50,226 --> 00:31:52,326 2912 | and engaging ad experiences, 2913 | 2914 | 2915 | 508 2916 | 00:31:53,226 --> 00:31:56,616 2917 | so your campaigns will be 2918 | more effective and efficient 2919 | 2920 | 2921 | 509 2922 | 00:31:56,826 --> 00:31:59,246 2923 | at driving downloads 2924 | and in-app purchases. 2925 | 2926 | 2927 | 510 2928 | 00:31:59,756 --> 00:32:02,826 2929 | And how to continuously monitor 2930 | 2931 | 2932 | 511 2933 | 00:32:02,826 --> 00:32:06,156 2934 | and measure campaign 2935 | effectiveness using iAd 2936 | 2937 | 2938 | 512 2939 | 00:32:06,156 --> 00:32:08,546 2940 | WorkBench and the 2941 | attribution API. 2942 | 2943 | 2944 | 513 2945 | 00:32:11,916 --> 00:32:15,536 2946 | These are all the reasons 2947 | that iAd is a great toolset 2948 | 2949 | 2950 | 514 2951 | 00:32:15,536 --> 00:32:17,116 2952 | for every app developer. 2953 | 2954 | 2955 | 515 2956 | 00:32:17,796 --> 00:32:20,936 2957 | It is easy to leverage 2958 | iAd wherever you are 2959 | 2960 | 2961 | 516 2962 | 00:32:20,936 --> 00:32:24,746 2963 | in your app development process 2964 | to impact the future success 2965 | 2966 | 2967 | 517 2968 | 00:32:24,836 --> 00:32:27,166 2969 | of your app and just 2970 | as important, 2971 | 2972 | 2973 | 518 2974 | 00:32:27,536 --> 00:32:29,526 2975 | the future success 2976 | of your business. 2977 | 2978 | 2979 | 519 2980 | 00:32:30,106 --> 00:32:32,566 2981 | And one more thing. 2982 | 2983 | 2984 | 520 2985 | 00:32:33,126 --> 00:32:36,846 2986 | For those of you who are 2987 | publishers of content 2988 | 2989 | 2990 | 521 2991 | 00:32:37,146 --> 00:32:39,486 2992 | for the new news app that 2993 | was announced yesterday, 2994 | 2995 | 2996 | 522 2997 | 00:32:39,486 --> 00:32:44,786 2998 | you will be able to monetize and 2999 | promote your content using iAd. 3000 | 3001 | 3002 | 523 3003 | 00:32:46,136 --> 00:32:47,756 3004 | Go to the news publisher page 3005 | 3006 | 3007 | 524 3008 | 00:32:47,976 --> 00:32:50,786 3009 | on the Apple developer 3010 | site for more information. 3011 | 3012 | 3013 | 525 3014 | 00:32:51,626 --> 00:32:54,966 3015 | And for more information 3016 | about iAd, you can refer 3017 | 3018 | 3019 | 526 3020 | 00:32:54,966 --> 00:32:58,206 3021 | to the iAd Developer Guide 3022 | and iAd Developer Forums, 3023 | 3024 | 3025 | 527 3026 | 00:32:58,546 --> 00:33:01,786 3027 | or contact our Technology 3028 | Evangelist Team. 3029 | 3030 | 3031 | 528 3032 | 00:33:03,376 --> 00:33:06,446 3033 | There's also a related iTunes 3034 | Connect session tomorrow. 3035 | 3036 | 3037 | 529 3038 | 00:33:07,516 --> 00:33:08,956 3039 | Thank you, and enjoy the 3040 | rest of the conference. 3041 | 3042 | 3043 | 530 3044 | 00:33:09,516 --> 00:33:12,500 3045 | [Applause] 3046 | 3047 | -------------------------------------------------------------------------------- /subtitles/SD/503_sd_monetize_and_promote_your_app_with_iad.srt: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:25,046 --> 00:00:25,516 3 | >> CAROL TENG: Hello. 4 | 5 | 6 | 2 7 | 00:00:25,996 --> 00:00:26,436 8 | And welcome. 9 | 10 | 11 | 3 12 | 00:00:26,436 --> 00:00:32,826 13 | Many of you developers out there 14 | pour all of your time, effort, 15 | 16 | 17 | 4 18 | 00:00:33,306 --> 00:00:36,166 19 | blood, sweat, and tears 20 | into building some 21 | 22 | 23 | 5 24 | 00:00:36,166 --> 00:00:37,666 25 | of the most amazing, 26 | 27 | 28 | 6 29 | 00:00:37,666 --> 00:00:40,526 30 | entertaining, and 31 | beautiful apps. 32 | 33 | 34 | 7 35 | 00:00:41,206 --> 00:00:46,236 36 | The most successful developers, 37 | however, don't just focus 38 | 39 | 40 | 8 41 | 00:00:46,326 --> 00:00:48,476 42 | on building great apps. 43 | 44 | 45 | 9 46 | 00:00:48,766 --> 00:00:50,986 47 | They also recognize 48 | the importance 49 | 50 | 51 | 10 52 | 00:00:51,466 --> 00:00:55,676 53 | of building a great 54 | business around their apps. 55 | 56 | 57 | 11 58 | 00:00:55,996 --> 00:00:58,566 59 | And that's what we are here 60 | to talk to you about today. 61 | 62 | 63 | 12 64 | 00:00:59,556 --> 00:01:00,966 65 | My name is Carol Teng. 66 | 67 | 68 | 13 69 | 00:01:00,966 --> 00:01:03,736 70 | I will be joined by my 71 | colleague, Shashank Phadke, 72 | 73 | 74 | 14 75 | 00:01:03,736 --> 00:01:06,236 76 | and we are from the iAd team. 77 | 78 | 79 | 15 80 | 00:01:06,836 --> 00:01:10,496 81 | Today we are here to 82 | introduce you to iAd, 83 | 84 | 85 | 16 86 | 00:01:10,846 --> 00:01:13,106 87 | Apple's digital advertising 88 | platform. 89 | 90 | 91 | 17 92 | 00:01:14,346 --> 00:01:16,356 93 | Whether you are a 94 | large development house 95 | 96 | 97 | 18 98 | 00:01:16,606 --> 00:01:21,206 99 | or a small indie developer, iAd 100 | has a wide range of solutions 101 | 102 | 103 | 19 104 | 00:01:21,646 --> 00:01:23,286 105 | to help you grow your business. 106 | 107 | 108 | 20 109 | 00:01:24,006 --> 00:01:29,616 110 | And some of the challenges that 111 | all businesses face are how 112 | 113 | 114 | 21 115 | 00:01:29,616 --> 00:01:33,666 116 | to generate revenue and how to 117 | attract and retain customers. 118 | 119 | 120 | 22 121 | 00:01:34,476 --> 00:01:37,446 122 | iAd has solutions for both. 123 | 124 | 125 | 23 126 | 00:01:38,076 --> 00:01:41,876 127 | To help generate 128 | revenue, integrating iAd 129 | 130 | 131 | 24 132 | 00:01:41,876 --> 00:01:43,176 133 | into your app is simple. 134 | 135 | 136 | 25 137 | 00:01:44,156 --> 00:01:46,196 138 | And you can do this 139 | with minimal code. 140 | 141 | 142 | 26 143 | 00:01:46,386 --> 00:01:49,376 144 | We will show you how, 145 | later in the presentation. 146 | 147 | 148 | 27 149 | 00:01:51,776 --> 00:01:54,186 150 | Acquiring customers, 151 | on the other hand, 152 | 153 | 154 | 28 155 | 00:01:54,456 --> 00:01:57,016 156 | can be especially daunting 157 | for an app developer. 158 | 159 | 160 | 29 161 | 00:01:58,086 --> 00:01:59,366 162 | As you heard yesterday, 163 | 164 | 165 | 30 166 | 00:01:59,366 --> 00:02:03,216 167 | there are over 1.5 million 168 | apps in the App Store. 169 | 170 | 171 | 31 172 | 00:02:03,766 --> 00:02:07,236 173 | And an average of 119 174 | apps on a user's device. 175 | 176 | 177 | 32 178 | 00:02:08,216 --> 00:02:11,766 179 | That is a lot of competition 180 | vying for users' attention. 181 | 182 | 183 | 33 184 | 00:02:12,336 --> 00:02:15,166 185 | So how do you help 186 | your app get noticed? 187 | 188 | 189 | 34 190 | 00:02:15,786 --> 00:02:19,666 191 | For this, iAd has solutions 192 | 193 | 194 | 35 195 | 00:02:19,666 --> 00:02:23,586 196 | to help you efficiently promote 197 | your app in the iOS ecosystem 198 | 199 | 200 | 36 201 | 00:02:24,016 --> 00:02:27,316 202 | to generate awareness for your 203 | apps and acquire customers. 204 | 205 | 206 | 37 207 | 00:02:30,156 --> 00:02:33,756 208 | Promoting your app involves 209 | three main concepts. 210 | 211 | 212 | 38 213 | 00:02:34,926 --> 00:02:38,196 214 | First, identifying and 215 | segmenting your users 216 | 217 | 218 | 39 219 | 00:02:38,676 --> 00:02:40,976 220 | so you know who the 221 | different audiences are 222 | 223 | 224 | 40 225 | 00:02:40,976 --> 00:02:42,346 226 | that you are trying to reach. 227 | 228 | 229 | 41 230 | 00:02:43,656 --> 00:02:47,876 231 | Engaging those users with 232 | relevant and targeted messaging 233 | 234 | 235 | 42 236 | 00:02:47,876 --> 00:02:49,616 237 | in your app promotion campaigns, 238 | 239 | 240 | 43 241 | 00:02:50,156 --> 00:02:52,516 242 | and then measuring 243 | the effectiveness 244 | 245 | 246 | 44 247 | 00:02:52,576 --> 00:02:55,976 248 | of those campaigns, so you 249 | can continuously optimize 250 | 251 | 252 | 45 253 | 00:02:56,036 --> 00:02:57,196 254 | and improve the outcomes. 255 | 256 | 257 | 46 258 | 00:02:57,796 --> 00:03:03,406 259 | We will demonstrate how to 260 | use tools and best practices 261 | 262 | 263 | 47 264 | 00:03:03,706 --> 00:03:06,436 265 | that enable you to 266 | do both: monetize 267 | 268 | 269 | 48 270 | 00:03:06,866 --> 00:03:09,966 271 | and promote throughout your 272 | app development lifecycle. 273 | 274 | 275 | 49 276 | 00:03:10,966 --> 00:03:11,786 277 | Let's get started. 278 | 279 | 280 | 50 281 | 00:03:12,286 --> 00:03:17,006 282 | Imagine that I'm 283 | an app developer. 284 | 285 | 286 | 51 287 | 00:03:17,156 --> 00:03:19,636 288 | I have a few apps 289 | in the App Store. 290 | 291 | 292 | 52 293 | 00:03:19,766 --> 00:03:24,016 294 | And I'm about to launch my 295 | next great app, LiteRight. 296 | 297 | 298 | 53 299 | 00:03:25,386 --> 00:03:29,306 300 | LiteRight is a new camera app 301 | with some super special filters 302 | 303 | 304 | 54 305 | 00:03:29,306 --> 00:03:31,476 306 | that aren't available 307 | anywhere else. 308 | 309 | 310 | 55 311 | 00:03:32,036 --> 00:03:36,036 312 | It is going to be a free 313 | app which gives users access 314 | 315 | 316 | 56 317 | 00:03:36,096 --> 00:03:40,406 318 | to a subset of those filters, 319 | and in-app purchases allow users 320 | 321 | 322 | 57 323 | 00:03:40,406 --> 00:03:43,176 324 | to gain access to even 325 | more incredible filters. 326 | 327 | 328 | 58 329 | 00:03:45,876 --> 00:03:48,036 330 | This is my app development 331 | timeline, 332 | 333 | 334 | 59 335 | 00:03:48,166 --> 00:03:50,246 336 | which may look similar 337 | to your own. 338 | 339 | 340 | 60 341 | 00:03:50,726 --> 00:03:54,126 342 | Starting with the design phase, 343 | then I'll be developing the app, 344 | 345 | 346 | 61 347 | 00:03:54,576 --> 00:03:57,616 348 | launching it in the App Store, 349 | and growing my user base. 350 | 351 | 352 | 62 353 | 00:03:58,226 --> 00:04:02,286 354 | I'm currently in the 355 | design phase of LiteRight, 356 | 357 | 358 | 63 359 | 00:04:02,796 --> 00:04:05,046 360 | but I'm already thinking 361 | about the business model 362 | 363 | 364 | 64 365 | 00:04:05,116 --> 00:04:08,246 366 | and how I'm going 367 | to monetize my app. 368 | 369 | 370 | 65 371 | 00:04:08,766 --> 00:04:12,116 372 | Since LiteRight will be 373 | a free app, I've decided 374 | 375 | 376 | 66 377 | 00:04:12,116 --> 00:04:16,156 378 | to make it ad-supported so I 379 | can start generating revenue 380 | 381 | 382 | 67 383 | 00:04:16,156 --> 00:04:16,716 384 | right away. 385 | 386 | 387 | 68 388 | 00:04:17,276 --> 00:04:23,156 389 | And I've selected iAd as my 390 | preferred advertising partner 391 | 392 | 393 | 69 394 | 00:04:23,636 --> 00:04:28,006 395 | to monetize my app because iAd 396 | takes care of the whole process 397 | 398 | 399 | 70 400 | 00:04:28,306 --> 00:04:33,206 401 | of finding great advertisers, 402 | serving the ads, reporting on 403 | 404 | 405 | 71 406 | 00:04:33,286 --> 00:04:36,206 407 | and billing for the 408 | ads that run in my app. 409 | 410 | 411 | 72 412 | 00:04:36,976 --> 00:04:40,086 413 | And for that, iAd 414 | shares 70 percent 415 | 416 | 417 | 73 418 | 00:04:40,086 --> 00:04:42,816 419 | of the revenue generated 420 | directly with me. 421 | 422 | 423 | 74 424 | 00:04:43,376 --> 00:04:46,646 425 | And iAd isn't an 426 | exclusive network. 427 | 428 | 429 | 75 430 | 00:04:47,106 --> 00:04:48,956 431 | So I can work with 432 | other ad networks 433 | 434 | 435 | 76 436 | 00:04:48,956 --> 00:04:50,986 437 | and mediation partners 438 | if I choose. 439 | 440 | 441 | 77 442 | 00:04:52,276 --> 00:04:55,486 443 | But because I'm trying to 444 | maximize my revenue and I care 445 | 446 | 447 | 78 448 | 00:04:55,486 --> 00:04:58,246 449 | about premium, high quality ads, 450 | 451 | 452 | 79 453 | 00:04:58,806 --> 00:05:00,896 454 | I'm going to make 455 | iAd my first call. 456 | 457 | 458 | 80 459 | 00:05:00,896 --> 00:05:06,966 460 | Because I've spent a lot of 461 | time building a beautiful app, 462 | 463 | 464 | 81 465 | 00:05:07,446 --> 00:05:09,966 466 | the ads in my app should 467 | be equally beautiful. 468 | 469 | 470 | 82 471 | 00:05:11,366 --> 00:05:13,796 472 | To achieve that, 473 | iAd works with some 474 | 475 | 476 | 83 477 | 00:05:13,796 --> 00:05:17,886 478 | of the top creative agencies 479 | to deliver rich, immersive, 480 | 481 | 482 | 84 483 | 00:05:18,236 --> 00:05:20,946 484 | high production value 485 | ads from some 486 | 487 | 488 | 85 489 | 00:05:20,946 --> 00:05:23,306 490 | of the world's most 491 | recognized brands. 492 | 493 | 494 | 86 495 | 00:05:23,826 --> 00:05:28,356 496 | In addition, every ad is 497 | reviewed and certified 498 | 499 | 500 | 87 501 | 00:05:28,616 --> 00:05:32,506 502 | by the iAd team so I can be 503 | sure that the ads appearing 504 | 505 | 506 | 88 507 | 00:05:32,506 --> 00:05:35,576 508 | in my app comply with 509 | Apple's creative guidelines. 510 | 511 | 512 | 89 513 | 00:05:36,116 --> 00:05:41,936 514 | And I can block any unwanted ads 515 | using key words and iTunes URLs. 516 | 517 | 518 | 90 519 | 00:05:43,286 --> 00:05:46,166 520 | And all of this contributes 521 | to a great user experience. 522 | 523 | 524 | 91 525 | 00:05:46,556 --> 00:05:52,556 526 | LiteRight is going to be 527 | a globally available app 528 | 529 | 530 | 92 531 | 00:05:52,556 --> 00:05:56,766 532 | which means my users will 533 | be everywhere and so is iAd, 534 | 535 | 536 | 93 537 | 00:05:57,696 --> 00:06:01,916 538 | with the ability to reach iOS 539 | users in over 100 countries. 540 | 541 | 542 | 94 543 | 00:06:02,516 --> 00:06:08,896 544 | And speaking of my users, iAd's 545 | solution is privacy conscious, 546 | 547 | 548 | 95 549 | 00:06:09,556 --> 00:06:11,796 550 | with built-in privacy controls. 551 | 552 | 553 | 96 554 | 00:06:12,646 --> 00:06:15,756 555 | That means my users' 556 | data is highly secure 557 | 558 | 559 | 97 560 | 00:06:15,756 --> 00:06:18,196 561 | and is never shared 562 | with third-parties, 563 | 564 | 565 | 98 566 | 00:06:18,736 --> 00:06:20,626 567 | which my users will appreciate. 568 | 569 | 570 | 99 571 | 00:06:21,696 --> 00:06:23,436 572 | It complies with 573 | limit ad tracking, 574 | 575 | 576 | 100 577 | 00:06:23,766 --> 00:06:25,866 578 | and is automatically 579 | managed by iAd, 580 | 581 | 582 | 101 583 | 00:06:26,406 --> 00:06:28,966 584 | due to a deep integration 585 | with iOS. 586 | 587 | 588 | 102 589 | 00:06:29,856 --> 00:06:36,026 590 | And because iAd is built 591 | into the iOS framework, 592 | 593 | 594 | 103 595 | 00:06:36,826 --> 00:06:40,176 596 | integrating it into my 597 | app is quick and simple. 598 | 599 | 600 | 104 601 | 00:06:40,856 --> 00:06:44,906 602 | There are no additional 603 | SDKs and no static libraries 604 | 605 | 606 | 105 607 | 00:06:44,976 --> 00:06:47,326 608 | or third-party headers 609 | to clutter up my project. 610 | 611 | 612 | 106 613 | 00:06:48,126 --> 00:06:50,846 614 | I can be up and running 615 | with minimal code. 616 | 617 | 618 | 107 619 | 00:06:51,986 --> 00:06:54,596 620 | Documentation and 621 | sample code are available 622 | 623 | 624 | 108 625 | 00:06:54,596 --> 00:06:55,726 626 | to help me along the way. 627 | 628 | 629 | 109 630 | 00:06:56,276 --> 00:07:01,076 631 | And here are all the ad 632 | formats that iAd offers. 633 | 634 | 635 | 110 636 | 00:07:01,806 --> 00:07:05,526 637 | I can integrate one or more 638 | of these ad formats depending 639 | 640 | 641 | 111 642 | 00:07:05,596 --> 00:07:09,466 643 | on what best complements my 644 | app content and experience. 645 | 646 | 647 | 112 648 | 00:07:10,026 --> 00:07:14,856 649 | A banner, which typically 650 | appears at the bottom 651 | 652 | 653 | 113 654 | 00:07:14,856 --> 00:07:21,256 655 | of the app, a medium rectangle 656 | or M-rec which is good in-line 657 | 658 | 659 | 114 660 | 00:07:21,256 --> 00:07:23,286 661 | for content-heavy apps. 662 | 663 | 664 | 115 665 | 00:07:25,356 --> 00:07:28,286 666 | Pre-roll video that 667 | are best for apps 668 | 669 | 670 | 116 671 | 00:07:28,316 --> 00:07:30,006 672 | that primarily deliver video. 673 | 674 | 675 | 117 676 | 00:07:32,316 --> 00:07:35,716 677 | And interstitial, for apps that 678 | have good, logical transitions, 679 | 680 | 681 | 118 682 | 00:07:35,716 --> 00:07:38,986 683 | such as in games where 684 | users are leveling up. 685 | 686 | 687 | 119 688 | 00:07:40,966 --> 00:07:44,866 689 | And coming soon, iAd will 690 | support interstitial video, 691 | 692 | 693 | 120 694 | 00:07:45,566 --> 00:07:48,566 695 | another way to help further 696 | increase monetization 697 | 698 | 699 | 121 700 | 00:07:48,836 --> 00:07:53,906 701 | for my app. 702 | 703 | 704 | 122 705 | 00:07:54,176 --> 00:07:55,856 706 | Now let's look at 707 | how we integrate iAd 708 | 709 | 710 | 123 711 | 00:07:56,146 --> 00:07:58,186 712 | into my app, LiteRight. 713 | 714 | 715 | 124 716 | 00:07:59,546 --> 00:08:02,656 717 | For LiteRight, I'm going 718 | to include banner ads 719 | 720 | 721 | 125 722 | 00:08:02,656 --> 00:08:04,186 723 | on the photo gallery screen, 724 | 725 | 726 | 126 727 | 00:08:04,756 --> 00:08:08,096 728 | and an interstitial every third 729 | time a user shares a photo. 730 | 731 | 732 | 127 733 | 00:08:08,666 --> 00:08:14,916 734 | For the banner, I need to link 735 | to the iAd framework and import, 736 | 737 | 738 | 128 739 | 00:08:15,456 --> 00:08:17,986 740 | include the iAd library 741 | as part of my project. 742 | 743 | 744 | 129 745 | 00:08:17,986 --> 00:08:22,426 746 | Then I'll need to configure 747 | the view controller, 748 | 749 | 750 | 130 751 | 00:08:22,606 --> 00:08:24,986 752 | such that wherever I 753 | want a banner to appear, 754 | 755 | 756 | 131 757 | 00:08:25,316 --> 00:08:27,586 758 | I'll set 'can display 759 | banner ads' to true. 760 | 761 | 762 | 132 763 | 00:08:28,486 --> 00:08:31,806 764 | And a good place to do this is 765 | in the 'view did load' callback. 766 | 767 | 768 | 133 769 | 00:08:32,566 --> 00:08:35,796 770 | iAd will take care 771 | of managing the view 772 | 773 | 774 | 134 775 | 00:08:35,796 --> 00:08:38,506 776 | such that the banner 777 | animates in on screen 778 | 779 | 780 | 135 781 | 00:08:38,506 --> 00:08:40,856 782 | and collapses the frame 783 | of my content accordingly. 784 | 785 | 786 | 136 787 | 00:08:41,416 --> 00:08:46,606 788 | And when I'm done, here is 789 | what that might look like. 790 | 791 | 792 | 137 793 | 00:08:47,166 --> 00:08:52,756 794 | Unlike banners there's a 795 | little more setup required 796 | 797 | 798 | 138 799 | 00:08:52,836 --> 00:08:54,736 800 | to prepare my app 801 | for interstitials. 802 | 803 | 804 | 139 805 | 00:08:55,356 --> 00:08:57,556 806 | In my app delegate, 807 | 808 | 809 | 140 810 | 00:08:57,556 --> 00:08:59,616 811 | in the 'application 812 | did finish launching 813 | 814 | 815 | 141 816 | 00:08:59,886 --> 00:09:04,686 817 | with options' callback, I need 818 | to let the iAd server know 819 | 820 | 821 | 142 822 | 00:09:04,686 --> 00:09:05,546 823 | that my app is going 824 | 825 | 826 | 143 827 | 00:09:05,546 --> 00:09:09,466 828 | to be requesting an interstitial 829 | via the 'prepare interstitial 830 | 831 | 832 | 144 833 | 00:09:09,466 --> 00:09:10,136 834 | ads' call. 835 | 836 | 837 | 145 838 | 00:09:10,756 --> 00:09:16,496 839 | And in the view controller, 840 | just prior to the interstitial, 841 | 842 | 843 | 146 844 | 00:09:16,616 --> 00:09:18,406 845 | I can configure the presentation 846 | 847 | 848 | 147 849 | 00:09:18,806 --> 00:09:21,216 850 | so that the interstitial 851 | will appear just before the 852 | 853 | 854 | 148 855 | 00:09:21,216 --> 00:09:22,036 856 | next screen. 857 | 858 | 859 | 149 860 | 00:09:23,086 --> 00:09:26,686 861 | A good place to do this is in 862 | the 'prepare for segue' method. 863 | 864 | 865 | 150 866 | 00:09:27,226 --> 00:09:31,066 867 | iAd makes this simple. 868 | 869 | 870 | 151 871 | 00:09:31,876 --> 00:09:35,186 872 | All I need to do is set the 873 | interstitial presentation policy 874 | 875 | 876 | 152 877 | 00:09:35,536 --> 00:09:36,296 878 | to automatic. 879 | 880 | 881 | 153 882 | 00:09:36,816 --> 00:09:40,406 883 | And this lets iAd manage the 884 | presentation of interstitial ads 885 | 886 | 887 | 154 888 | 00:09:40,796 --> 00:09:41,676 889 | in the view controller. 890 | 891 | 892 | 155 893 | 00:09:42,246 --> 00:09:47,226 894 | And when I'm done I can see 895 | what that will look like. 896 | 897 | 898 | 156 899 | 00:09:48,216 --> 00:09:51,036 900 | I have just shown you 901 | how to integrate a banner 902 | 903 | 904 | 157 905 | 00:09:51,036 --> 00:09:51,996 906 | and interstitial, 907 | 908 | 909 | 158 910 | 00:09:52,346 --> 00:09:55,226 911 | but integrating the other ad 912 | formats is just as simple, 913 | 914 | 915 | 159 916 | 00:09:56,386 --> 00:10:00,466 917 | and iAd has tools to let me test 918 | my integration so I can ensure 919 | 920 | 921 | 160 922 | 00:10:00,466 --> 00:10:03,776 923 | that I've implemented everything 924 | correctly before I launch. 925 | 926 | 927 | 161 928 | 00:10:05,536 --> 00:10:07,196 929 | For some of you at this stage, 930 | 931 | 932 | 162 933 | 00:10:07,556 --> 00:10:09,746 934 | there may still be more 935 | development work left 936 | 937 | 938 | 163 939 | 00:10:09,746 --> 00:10:10,086 940 | for your app. 941 | 942 | 943 | 164 944 | 00:10:11,076 --> 00:10:14,386 945 | But since I've taken the 946 | time to integrate iAd early 947 | 948 | 949 | 165 950 | 00:10:14,386 --> 00:10:17,236 951 | into my development cycle, 952 | I don't have to worry 953 | 954 | 955 | 166 956 | 00:10:17,236 --> 00:10:19,046 957 | about coming back 958 | and doing it later. 959 | 960 | 961 | 167 962 | 00:10:19,046 --> 00:10:22,906 963 | And I can be generating 964 | revenue as soon as I launch. 965 | 966 | 967 | 168 968 | 00:10:26,236 --> 00:10:28,746 969 | So now we've launched LiteRight. 970 | 971 | 972 | 169 973 | 00:10:29,776 --> 00:10:31,536 974 | It's live in the App Store. 975 | 976 | 977 | 170 978 | 00:10:31,626 --> 00:10:35,866 979 | Users are downloading 980 | and using the app. 981 | 982 | 983 | 171 984 | 00:10:36,126 --> 00:10:37,546 985 | And ads are running in it based 986 | 987 | 988 | 172 989 | 00:10:37,546 --> 00:10:39,166 990 | on the integrations 991 | I just showed you. 992 | 993 | 994 | 173 995 | 00:10:39,576 --> 00:10:42,826 996 | And here are examples of a 997 | banner and an interstitial. 998 | 999 | 1000 | 174 1001 | 00:10:43,386 --> 00:10:49,036 1002 | And I can see how much revenue 1003 | I'm generating from the ads 1004 | 1005 | 1006 | 175 1007 | 00:10:49,036 --> 00:10:51,696 1008 | in my app by checking 1009 | the reporting portals 1010 | 1011 | 1012 | 176 1013 | 00:10:51,696 --> 00:10:55,886 1014 | in iTunes Connect, or using 1015 | the new publisher reporting API 1016 | 1017 | 1018 | 177 1019 | 00:10:56,396 --> 00:10:57,916 1020 | that is coming soon. 1021 | 1022 | 1023 | 178 1024 | 00:10:59,016 --> 00:11:02,456 1025 | Because I've made the investment 1026 | to integrate iAd early 1027 | 1028 | 1029 | 179 1030 | 00:11:02,456 --> 00:11:06,166 1031 | on in my dev cycle, it 1032 | is already paying off. 1033 | 1034 | 1035 | 180 1036 | 00:11:09,056 --> 00:11:11,936 1037 | Now let's look at how to 1038 | make other smart investments 1039 | 1040 | 1041 | 181 1042 | 00:11:11,936 --> 00:11:14,186 1043 | that will grow my 1044 | app install base. 1045 | 1046 | 1047 | 182 1048 | 00:11:14,186 --> 00:11:20,456 1049 | So I'm earning the 1050 | steady stream of revenue 1051 | 1052 | 1053 | 183 1054 | 00:11:20,456 --> 00:11:22,716 1055 | by showing ads in my app. 1056 | 1057 | 1058 | 184 1059 | 00:11:22,766 --> 00:11:25,436 1060 | And some of you may choose 1061 | not to monetize your apps 1062 | 1063 | 1064 | 185 1065 | 00:11:25,436 --> 00:11:27,246 1066 | in this way, which is okay. 1067 | 1068 | 1069 | 186 1070 | 00:11:28,216 --> 00:11:31,546 1071 | All of you, however, probably 1072 | care about acquiring users 1073 | 1074 | 1075 | 187 1076 | 00:11:31,906 --> 00:11:35,206 1077 | and driving downloads 1078 | and usage of your app. 1079 | 1080 | 1081 | 188 1082 | 00:11:36,216 --> 00:11:38,526 1083 | And for that you 1084 | will need to invest 1085 | 1086 | 1087 | 189 1088 | 00:11:38,526 --> 00:11:40,196 1089 | in actively promoting your app 1090 | 1091 | 1092 | 190 1093 | 00:11:40,426 --> 00:11:43,206 1094 | which is what I plan 1095 | to do with LiteRight. 1096 | 1097 | 1098 | 191 1099 | 00:11:44,296 --> 00:11:47,666 1100 | Part of my growth strategy is 1101 | to take some of the revenue 1102 | 1103 | 1104 | 192 1105 | 00:11:47,666 --> 00:11:51,576 1106 | that I've earned from showing 1107 | ads in my app and reinvest it 1108 | 1109 | 1110 | 193 1111 | 00:11:51,576 --> 00:11:54,436 1112 | in marketing efforts to 1113 | promote LiteRight in order 1114 | 1115 | 1116 | 194 1117 | 00:11:54,436 --> 00:11:55,716 1118 | to expand my user base. 1119 | 1120 | 1121 | 195 1122 | 00:11:57,166 --> 00:12:00,316 1123 | As more people discover, 1124 | download, and use my app, 1125 | 1126 | 1127 | 196 1128 | 00:12:01,286 --> 00:12:04,376 1129 | that's more people engaging 1130 | with the ads in my app, 1131 | 1132 | 1133 | 197 1134 | 00:12:04,376 --> 00:12:07,016 1135 | which further increases 1136 | monetization. 1137 | 1138 | 1139 | 198 1140 | 00:12:07,786 --> 00:12:09,906 1141 | And this creates a 1142 | continuous cycle. 1143 | 1144 | 1145 | 199 1146 | 00:12:11,156 --> 00:12:15,606 1147 | So I can monetize 1148 | or I can promote, 1149 | 1150 | 1151 | 200 1152 | 00:12:15,606 --> 00:12:17,966 1153 | but experience has shown 1154 | 1155 | 1156 | 201 1157 | 00:12:17,966 --> 00:12:20,056 1158 | that I'm the most 1159 | successful when I do both. 1160 | 1161 | 1162 | 202 1163 | 00:12:20,646 --> 00:12:24,716 1164 | We just talked about how 1165 | to use iAd to monetize. 1166 | 1167 | 1168 | 203 1169 | 00:12:26,086 --> 00:12:29,526 1170 | Now let's talk about how 1171 | to use iAd to promote 1172 | 1173 | 1174 | 204 1175 | 00:12:29,526 --> 00:12:31,346 1176 | and drive growth for my app. 1177 | 1178 | 1179 | 205 1180 | 00:12:34,556 --> 00:12:37,566 1181 | My plan to promote 1182 | LiteRight is two pronged. 1183 | 1184 | 1185 | 206 1186 | 00:12:38,756 --> 00:12:43,786 1187 | First, I need to acquire 1188 | new users because with more 1189 | 1190 | 1191 | 207 1192 | 00:12:43,786 --> 00:12:47,326 1193 | than 1.5 million apps in the 1194 | App Store I need some way 1195 | 1196 | 1197 | 208 1198 | 00:12:47,326 --> 00:12:50,206 1199 | to make my app stand 1200 | out and be discovered. 1201 | 1202 | 1203 | 209 1204 | 00:12:50,776 --> 00:12:55,336 1205 | For that I'm going to actively 1206 | promote LiteRight and generate 1207 | 1208 | 1209 | 210 1210 | 00:12:55,336 --> 00:12:57,126 1211 | that awareness for my app. 1212 | 1213 | 1214 | 211 1215 | 00:12:58,176 --> 00:13:00,776 1216 | iAd has tools to help 1217 | me promote my app 1218 | 1219 | 1220 | 212 1221 | 00:13:01,006 --> 00:13:02,856 1222 | without any additional code. 1223 | 1224 | 1225 | 213 1226 | 00:13:03,686 --> 00:13:05,736 1227 | We'll show you how later 1228 | in the presentation. 1229 | 1230 | 1231 | 214 1232 | 00:13:06,276 --> 00:13:09,106 1233 | And what I've learned 1234 | from my experience 1235 | 1236 | 1237 | 215 1238 | 00:13:09,106 --> 00:13:12,306 1239 | with the other apps is 1240 | that I can't just focus 1241 | 1242 | 1243 | 216 1244 | 00:13:12,306 --> 00:13:13,726 1245 | on acquiring new users. 1246 | 1247 | 1248 | 217 1249 | 00:13:15,796 --> 00:13:19,056 1250 | I also need to engage 1251 | existing users 1252 | 1253 | 1254 | 218 1255 | 00:13:19,256 --> 00:13:23,396 1256 | who have already downloaded 1257 | because one in four apps 1258 | 1259 | 1260 | 219 1261 | 00:13:23,436 --> 00:13:25,696 1262 | that are downloaded 1263 | are never used. 1264 | 1265 | 1266 | 220 1267 | 00:13:26,676 --> 00:13:31,026 1268 | And only 32 percent of users 1269 | who download an app continue 1270 | 1271 | 1272 | 221 1273 | 00:13:31,026 --> 00:13:33,266 1274 | to use it after a week. 1275 | 1276 | 1277 | 222 1278 | 00:13:34,316 --> 00:13:37,296 1279 | To effectively reengage 1280 | users who have downloaded, 1281 | 1282 | 1283 | 223 1284 | 00:13:37,846 --> 00:13:40,516 1285 | I need to understand what 1286 | kind of users they are 1287 | 1288 | 1289 | 224 1290 | 00:13:41,406 --> 00:13:43,356 1291 | so I can tailor my 1292 | marketing messaging 1293 | 1294 | 1295 | 225 1296 | 00:13:43,356 --> 00:13:45,236 1297 | and target my ad 1298 | spend accordingly. 1299 | 1300 | 1301 | 226 1302 | 00:13:46,566 --> 00:13:49,716 1303 | And for that I'll need 1304 | to segment my users based 1305 | 1306 | 1307 | 227 1308 | 00:13:49,716 --> 00:13:52,106 1309 | on their behavior in my app. 1310 | 1311 | 1312 | 228 1313 | 00:13:52,896 --> 00:13:56,076 1314 | iAd lets me create several 1315 | hundred audience segments, 1316 | 1317 | 1318 | 229 1319 | 00:13:57,266 --> 00:14:01,076 1320 | but to start I'll group my 1321 | users into two custom segments. 1322 | 1323 | 1324 | 230 1325 | 00:14:02,466 --> 00:14:05,136 1326 | Dormant users, people 1327 | who have downloaded 1328 | 1329 | 1330 | 231 1331 | 00:14:05,136 --> 00:14:06,536 1332 | but are no longer active. 1333 | 1334 | 1335 | 232 1336 | 00:14:07,296 --> 00:14:10,196 1337 | For them I plan to 1338 | promote a special offer. 1339 | 1340 | 1341 | 233 1342 | 00:14:10,776 --> 00:14:14,456 1343 | And a starter pack 1344 | purchaser segment. 1345 | 1346 | 1347 | 234 1348 | 00:14:14,906 --> 00:14:17,496 1349 | These are users who have 1350 | purchased the filter starter 1351 | 1352 | 1353 | 235 1354 | 00:14:17,496 --> 00:14:18,226 1355 | pack in my app. 1356 | 1357 | 1358 | 236 1359 | 00:14:19,406 --> 00:14:22,626 1360 | For them I plan to promote 1361 | our platinum filter package. 1362 | 1363 | 1364 | 237 1365 | 00:14:23,226 --> 00:14:26,776 1366 | To create a custom 1367 | audience segment, 1368 | 1369 | 1370 | 238 1371 | 00:14:26,976 --> 00:14:30,266 1372 | let's look at how we integrate 1373 | the audience segmentation code 1374 | 1375 | 1376 | 239 1377 | 00:14:30,386 --> 00:14:34,376 1378 | into my app as part of 1379 | the next update to my app. 1380 | 1381 | 1382 | 240 1383 | 00:14:34,376 --> 00:14:37,266 1384 | And I'll use the starter pack 1385 | purchaser segment as my example. 1386 | 1387 | 1388 | 241 1389 | 00:14:37,796 --> 00:14:44,356 1390 | First, I'll check to see 1391 | if users have purchased one 1392 | 1393 | 1394 | 242 1395 | 00:14:44,356 --> 00:14:47,746 1396 | of my starter filters, which 1397 | means I want to add a them 1398 | 1399 | 1400 | 243 1401 | 00:14:47,746 --> 00:14:50,776 1402 | to the starter pack 1403 | purchasers audience segment. 1404 | 1405 | 1406 | 244 1407 | 00:14:50,886 --> 00:14:56,126 1408 | Then I need to get a 1409 | reference to the shared client. 1410 | 1411 | 1412 | 245 1413 | 00:14:57,436 --> 00:15:01,226 1414 | And next I'll need to tell 1415 | iAd which segment to add users 1416 | 1417 | 1418 | 246 1419 | 00:15:01,296 --> 00:15:03,806 1420 | to by keeping track of the users 1421 | 1422 | 1423 | 247 1424 | 00:15:03,806 --> 00:15:06,386 1425 | who have purchased my 1426 | starter filter pack. 1427 | 1428 | 1429 | 248 1430 | 00:15:07,596 --> 00:15:12,356 1431 | I can do this by calling the 1432 | 'add client to segments' method, 1433 | 1434 | 1435 | 249 1436 | 00:15:13,036 --> 00:15:14,886 1437 | which takes two arguments. 1438 | 1439 | 1440 | 250 1441 | 00:15:16,316 --> 00:15:20,376 1442 | The first is an array of 1443 | segment IDs which I got 1444 | 1445 | 1446 | 251 1447 | 00:15:20,496 --> 00:15:22,016 1448 | from the iAd WorkBench tool. 1449 | 1450 | 1451 | 252 1452 | 00:15:23,336 --> 00:15:26,026 1453 | If I attempt to send 1454 | some random segment IDs, 1455 | 1456 | 1457 | 253 1458 | 00:15:26,586 --> 00:15:27,586 1459 | those will be ignored. 1460 | 1461 | 1462 | 254 1463 | 00:15:27,756 --> 00:15:31,326 1464 | So I do have to get 1465 | these from iAd WorkBench. 1466 | 1467 | 1468 | 255 1469 | 00:15:31,326 --> 00:15:36,736 1470 | And we'll show you where 1471 | later during the demo. 1472 | 1473 | 1474 | 256 1475 | 00:15:36,896 --> 00:15:40,726 1476 | Second I'm going to set 1477 | 'replace existing' to false. 1478 | 1479 | 1480 | 257 1481 | 00:15:41,146 --> 00:15:43,176 1482 | Since I don't want 1483 | these users removed 1484 | 1485 | 1486 | 258 1487 | 00:15:43,256 --> 00:15:48,376 1488 | from any other existing 1489 | segments they may already be in. 1490 | 1491 | 1492 | 259 1493 | 00:15:48,606 --> 00:15:50,676 1494 | Now that I've done the 1495 | appropriate prep work 1496 | 1497 | 1498 | 260 1499 | 00:15:50,676 --> 00:15:54,226 1500 | to segment my users, 1501 | I'm ready to execute 1502 | 1503 | 1504 | 261 1505 | 00:15:54,326 --> 00:15:56,136 1506 | on my promotion plan 1507 | for LiteRight. 1508 | 1509 | 1510 | 262 1511 | 00:15:57,296 --> 00:15:59,796 1512 | And for that I'll 1513 | use iAd WorkBench, 1514 | 1515 | 1516 | 263 1517 | 00:16:00,936 --> 00:16:04,536 1518 | iAd's self-service 1519 | campaign management tool. 1520 | 1521 | 1522 | 264 1523 | 00:16:05,116 --> 00:16:10,146 1524 | It gives me full control 1525 | to create, manage, 1526 | 1527 | 1528 | 265 1529 | 00:16:10,216 --> 00:16:12,796 1530 | and optimize my app 1531 | promotion campaigns 1532 | 1533 | 1534 | 266 1535 | 00:16:13,456 --> 00:16:15,456 1536 | and gives access 1537 | to full reporting. 1538 | 1539 | 1540 | 267 1541 | 00:16:19,056 --> 00:16:22,396 1542 | Here you can see I've already 1543 | created a few campaigns 1544 | 1545 | 1546 | 268 1547 | 00:16:22,656 --> 00:16:27,716 1548 | to execute on my promotional 1549 | plan to acquire new users 1550 | 1551 | 1552 | 269 1553 | 00:16:27,866 --> 00:16:29,656 1554 | and to re-engage dormant users. 1555 | 1556 | 1557 | 270 1558 | 00:16:30,186 --> 00:16:33,036 1559 | Next we'll use iAd WorkBench 1560 | 1561 | 1562 | 271 1563 | 00:16:33,236 --> 00:16:37,066 1564 | to retarget my starter pack 1565 | purchaser audience segment 1566 | 1567 | 1568 | 272 1569 | 00:16:37,316 --> 00:16:39,536 1570 | to promote my platinum 1571 | filter package. 1572 | 1573 | 1574 | 273 1575 | 00:16:40,336 --> 00:16:43,436 1576 | For this campaign we are going 1577 | to drive users from the tap 1578 | 1579 | 1580 | 274 1581 | 00:16:43,946 --> 00:16:47,476 1582 | of an ad directly into 1583 | the page in my app 1584 | 1585 | 1586 | 275 1587 | 00:16:48,046 --> 00:16:49,716 1588 | where they can make 1589 | that in-app purchase. 1590 | 1591 | 1592 | 276 1593 | 00:16:51,196 --> 00:16:53,566 1594 | And I'll hand it over to 1595 | Shashank for that demo. 1596 | 1597 | 1598 | 277 1599 | 00:16:55,516 --> 00:16:59,696 1600 | [Applause] 1601 | 1602 | 1603 | 278 1604 | 00:17:00,196 --> 00:17:01,006 1605 | Thank you. 1606 | 1607 | 1608 | 279 1609 | 00:17:02,386 --> 00:17:02,986 1610 | >> SHASHANK PHADKE: 1611 | Thanks, Carol. 1612 | 1613 | 1614 | 280 1615 | 00:17:02,986 --> 00:17:05,136 1616 | Good morning, everybody. 1617 | 1618 | 1619 | 281 1620 | 00:17:05,136 --> 00:17:07,705 1621 | My name is Shashank Phadke, 1622 | and I'm with the iAd team. 1623 | 1624 | 1625 | 282 1626 | 00:17:09,006 --> 00:17:12,876 1627 | Today I'm going to show you two 1628 | awesome things in iAd WorkBench. 1629 | 1630 | 1631 | 283 1632 | 00:17:13,746 --> 00:17:16,256 1633 | First I'm going to show 1634 | you where you can view 1635 | 1636 | 1637 | 284 1638 | 00:17:16,256 --> 00:17:18,236 1639 | and manage your audience 1640 | segments. 1641 | 1642 | 1643 | 285 1644 | 00:17:19,576 --> 00:17:23,136 1645 | And number two, I am going 1646 | to show you how easy it is 1647 | 1648 | 1649 | 286 1650 | 00:17:23,136 --> 00:17:26,656 1651 | to create a retargeting 1652 | campaign using one 1653 | 1654 | 1655 | 287 1656 | 00:17:26,656 --> 00:17:27,746 1657 | of those audience segments. 1658 | 1659 | 1660 | 288 1661 | 00:17:28,576 --> 00:17:29,456 1662 | So let's get started. 1663 | 1664 | 1665 | 289 1666 | 00:17:38,856 --> 00:17:42,046 1667 | When I log into iAd 1668 | WorkBench I see my dashboard. 1669 | 1670 | 1671 | 290 1672 | 00:17:42,976 --> 00:17:48,016 1673 | This is where you see all your 1674 | campaigns across all your apps. 1675 | 1676 | 1677 | 291 1678 | 00:17:49,076 --> 00:17:51,446 1679 | To view your audience segments, 1680 | 1681 | 1682 | 292 1683 | 00:17:52,076 --> 00:17:55,676 1684 | you go to the 'my audiences' 1685 | page using the dropdown 1686 | 1687 | 1688 | 293 1689 | 00:17:55,786 --> 00:17:57,516 1690 | on the right side of the page. 1691 | 1692 | 1693 | 294 1694 | 00:17:58,896 --> 00:18:01,906 1695 | Here on the 'my audiences' page, 1696 | 1697 | 1698 | 295 1699 | 00:18:02,816 --> 00:18:04,786 1700 | you see all the audience 1701 | segments 1702 | 1703 | 1704 | 296 1705 | 00:18:05,186 --> 00:18:08,486 1706 | that you have defined 1707 | across your apps. 1708 | 1709 | 1710 | 297 1711 | 00:18:09,876 --> 00:18:12,406 1712 | For every audience 1713 | segment you create, 1714 | 1715 | 1716 | 298 1717 | 00:18:12,946 --> 00:18:16,766 1718 | iAd WorkBench assigns 1719 | you a unique segment ID. 1720 | 1721 | 1722 | 299 1723 | 00:18:17,346 --> 00:18:19,586 1724 | Like for example, 1725 | 1726 | 1727 | 300 1728 | 00:18:19,676 --> 00:18:22,016 1729 | for my LiteRight 1730 | starter pack purchases, 1731 | 1732 | 1733 | 301 1734 | 00:18:22,366 --> 00:18:25,576 1735 | this is the Segment ID 1736 | iAd WorkBench gave me. 1737 | 1738 | 1739 | 302 1740 | 00:18:26,796 --> 00:18:31,256 1741 | This is the ID you use in 1742 | your code to instrument 1743 | 1744 | 1745 | 303 1746 | 00:18:31,546 --> 00:18:34,176 1747 | and start adding 1748 | users to that segment. 1749 | 1750 | 1751 | 304 1752 | 00:18:34,226 --> 00:18:38,826 1753 | Because of that instrumentation 1754 | I can see that there are 1755 | 1756 | 1757 | 305 1758 | 00:18:38,826 --> 00:18:42,266 1759 | about 10,000 plus users already 1760 | 1761 | 1762 | 306 1763 | 00:18:42,346 --> 00:18:45,176 1764 | in my starter pack 1765 | purchases segment. 1766 | 1767 | 1768 | 307 1769 | 00:18:45,626 --> 00:18:52,626 1770 | Now, of course this number 1771 | will keep on updating as more 1772 | 1773 | 1774 | 308 1775 | 00:18:52,626 --> 00:18:56,186 1776 | and more users download 1777 | my starter pack. 1778 | 1779 | 1780 | 309 1781 | 00:18:57,576 --> 00:19:01,046 1782 | Now let's see how we 1783 | can use this segment 1784 | 1785 | 1786 | 310 1787 | 00:19:01,576 --> 00:19:07,486 1788 | to create a retargeting campaign 1789 | for my new platinum filter pack. 1790 | 1791 | 1792 | 311 1793 | 00:19:09,216 --> 00:19:14,436 1794 | To do that, I go back to 1795 | the dashboard and click 1796 | 1797 | 1798 | 312 1799 | 00:19:14,506 --> 00:19:18,216 1800 | on the 'create campaign' 1801 | button to start the campaign. 1802 | 1803 | 1804 | 313 1805 | 00:19:18,746 --> 00:19:25,386 1806 | I get to choose if I want to 1807 | promote an app or a product. 1808 | 1809 | 1810 | 314 1811 | 00:19:25,966 --> 00:19:27,546 1812 | In this case I'm 1813 | promoting my app. 1814 | 1815 | 1816 | 315 1817 | 00:19:27,546 --> 00:19:29,146 1818 | So I select "app." 1819 | 1820 | 1821 | 316 1822 | 00:19:29,996 --> 00:19:33,556 1823 | As you can see, all my 1824 | apps are already listed. 1825 | 1826 | 1827 | 317 1828 | 00:19:34,616 --> 00:19:36,656 1829 | I choose LiteRight 1830 | for this campaign. 1831 | 1832 | 1833 | 318 1834 | 00:19:37,226 --> 00:19:41,706 1835 | Then I get to choose if I want 1836 | to promote and run this ad 1837 | 1838 | 1839 | 319 1840 | 00:19:41,706 --> 00:19:45,456 1841 | on the app network 1842 | or on iTunes Radio. 1843 | 1844 | 1845 | 320 1846 | 00:19:46,536 --> 00:19:51,266 1847 | I choose app network and I also 1848 | see that my ad will be running 1849 | 1850 | 1851 | 321 1852 | 00:19:51,266 --> 00:19:57,146 1853 | in more than 100 countries 1854 | where I already support it. 1855 | 1856 | 1857 | 322 1858 | 00:19:57,416 --> 00:19:59,376 1859 | Next I choose my bid type. 1860 | 1861 | 1862 | 323 1863 | 00:20:00,906 --> 00:20:04,726 1864 | CPC, which is cost 1865 | per click, or CPM, 1866 | 1867 | 1868 | 324 1869 | 00:20:05,436 --> 00:20:07,456 1870 | which is cost per 1871 | thousand impressions. 1872 | 1873 | 1874 | 325 1875 | 00:20:08,816 --> 00:20:13,446 1876 | For this campaign, since I want 1877 | to pay only when the user clicks 1878 | 1879 | 1880 | 326 1881 | 00:20:13,446 --> 00:20:15,546 1882 | on my banner, I will choose CPC. 1883 | 1884 | 1885 | 327 1886 | 00:20:17,266 --> 00:20:21,256 1887 | Let's name this campaign. 1888 | 1889 | 1890 | 328 1891 | 00:20:21,986 --> 00:20:25,456 1892 | LiteRight platinum campaign. 1893 | 1894 | 1895 | 329 1896 | 00:20:28,876 --> 00:20:32,886 1897 | Next I see a list of 1898 | lines in the campaign. 1899 | 1900 | 1901 | 330 1902 | 00:20:33,406 --> 00:20:34,386 1903 | I don't have any. 1904 | 1905 | 1906 | 331 1907 | 00:20:35,166 --> 00:20:37,746 1908 | So let me show you what 1909 | it takes to create a line. 1910 | 1911 | 1912 | 332 1913 | 00:20:38,406 --> 00:20:40,616 1914 | Click on the 'create 1915 | line' button. 1916 | 1917 | 1918 | 333 1919 | 00:20:41,436 --> 00:20:46,906 1920 | First I choose which country 1921 | I want to run this ad. 1922 | 1923 | 1924 | 334 1925 | 00:20:47,126 --> 00:20:53,046 1926 | I choose U.S. And now for my 1927 | platinum filter pack I want 1928 | 1929 | 1930 | 335 1931 | 00:20:53,046 --> 00:20:55,936 1932 | to specifically target the users 1933 | 1934 | 1935 | 336 1936 | 00:20:56,016 --> 00:20:58,456 1937 | who have already 1938 | downloaded my starter pack. 1939 | 1940 | 1941 | 337 1942 | 00:20:59,746 --> 00:21:04,476 1943 | In this case I will select my 1944 | retargeting option to be 'yes.' 1945 | 1946 | 1947 | 338 1948 | 00:21:05,356 --> 00:21:12,116 1949 | As you can see, all my audience 1950 | segments are listed over here. 1951 | 1952 | 1953 | 339 1954 | 00:21:12,966 --> 00:21:16,036 1955 | This was the same view which we 1956 | saw in the 'my audiences' page. 1957 | 1958 | 1959 | 340 1960 | 00:21:17,056 --> 00:21:19,976 1961 | For this campaign 1962 | I want to reach 1963 | 1964 | 1965 | 341 1966 | 00:21:19,976 --> 00:21:22,586 1967 | out to this 10,000 1968 | plus LiteRight starter 1969 | 1970 | 1971 | 342 1972 | 00:21:22,586 --> 00:21:23,556 1973 | pack purchases. 1974 | 1975 | 1976 | 343 1977 | 00:21:23,556 --> 00:21:25,166 1978 | So I will select that. 1979 | 1980 | 1981 | 344 1982 | 00:21:26,676 --> 00:21:29,266 1983 | In addition to the 1984 | audience segment, 1985 | 1986 | 1987 | 345 1988 | 00:21:29,966 --> 00:21:32,896 1989 | I can choose other 1990 | targeting dimensions. 1991 | 1992 | 1993 | 346 1994 | 00:21:34,026 --> 00:21:37,426 1995 | Like, for example, if 1996 | I want my ad to run 1997 | 1998 | 1999 | 347 2000 | 00:21:37,426 --> 00:21:40,276 2001 | on specific devices, 2002 | iPhone or iPad. 2003 | 2004 | 2005 | 348 2006 | 00:21:40,856 --> 00:21:46,756 2007 | Or I could choose different 2008 | U.S. or user geographies, 2009 | 2010 | 2011 | 349 2012 | 00:21:48,186 --> 00:21:51,586 2013 | or I can have a dimension 2014 | of app channels, 2015 | 2016 | 2017 | 350 2018 | 00:21:52,286 --> 00:21:54,626 2019 | which is the iTunes 2020 | category of the apps, 2021 | 2022 | 2023 | 351 2024 | 00:21:54,956 --> 00:21:59,096 2025 | I want the ad to run on. 2026 | 2027 | 2028 | 352 2029 | 00:21:59,096 --> 00:22:01,886 2030 | Or I could schedule my ad 2031 | to run on a particular time 2032 | 2033 | 2034 | 353 2035 | 00:22:01,886 --> 00:22:05,796 2036 | of the day or days of the week. 2037 | 2038 | 2039 | 354 2040 | 00:22:05,796 --> 00:22:08,476 2041 | After selecting all the 2042 | targeting dimensions I can see 2043 | 2044 | 2045 | 355 2046 | 00:22:08,476 --> 00:22:12,976 2047 | that I can reach up to 10,000 2048 | plus users which is more 2049 | 2050 | 2051 | 356 2052 | 00:22:12,976 --> 00:22:16,836 2053 | than the minimum 6,000 required 2054 | for a retargeting campaign. 2055 | 2056 | 2057 | 357 2058 | 00:22:17,146 --> 00:22:20,056 2059 | So I'm good. 2060 | 2061 | 2062 | 358 2063 | 00:22:20,256 --> 00:22:21,866 2064 | Next I choose my ad type. 2065 | 2066 | 2067 | 359 2068 | 00:22:21,926 --> 00:22:23,636 2069 | It is going to be a banner. 2070 | 2071 | 2072 | 360 2073 | 00:22:24,506 --> 00:22:26,496 2074 | And I'm going to choose 2075 | a destination type 2076 | 2077 | 2078 | 361 2079 | 00:22:26,696 --> 00:22:27,986 2080 | of ad deep link. 2081 | 2082 | 2083 | 362 2084 | 00:22:28,936 --> 00:22:31,436 2085 | I'll tell you about this 2086 | ad deep link destination 2087 | 2088 | 2089 | 363 2090 | 00:22:31,506 --> 00:22:32,626 2091 | on the next screen. 2092 | 2093 | 2094 | 364 2095 | 00:22:33,516 --> 00:22:36,976 2096 | I choose my flight 2097 | dates, let it be running 2098 | 2099 | 2100 | 365 2101 | 00:22:36,976 --> 00:22:38,276 2102 | from tomorrow for a month. 2103 | 2104 | 2105 | 366 2106 | 00:22:38,906 --> 00:22:42,796 2107 | And then for the campaign 2108 | I define my budget. 2109 | 2110 | 2111 | 367 2112 | 00:22:44,006 --> 00:22:46,576 2113 | I would like to spend, 2114 | say, $3,000. 2115 | 2116 | 2117 | 368 2118 | 00:22:47,166 --> 00:22:51,496 2119 | And then I put in my CPC bid. 2120 | 2121 | 2122 | 369 2123 | 00:22:51,716 --> 00:22:54,016 2124 | Say, 50 cents. 2125 | 2126 | 2127 | 370 2128 | 00:22:54,276 --> 00:22:56,676 2129 | Now, iAd is an auction-based 2130 | marketplace. 2131 | 2132 | 2133 | 371 2134 | 00:22:57,536 --> 00:23:00,276 2135 | So I know for sure I 2136 | won't be paying any more 2137 | 2138 | 2139 | 372 2140 | 00:23:00,456 --> 00:23:01,586 2141 | than the 50 cents. 2142 | 2143 | 2144 | 373 2145 | 00:23:02,616 --> 00:23:06,256 2146 | In fact, I could be paying less. 2147 | 2148 | 2149 | 374 2150 | 00:23:06,256 --> 00:23:13,096 2151 | Let's name the line. 2152 | 2153 | 2154 | 375 2155 | 00:23:13,296 --> 00:23:19,226 2156 | Once I have defined the line on 2157 | the next screen, I see a list 2158 | 2159 | 2160 | 376 2161 | 00:23:19,226 --> 00:23:22,486 2162 | of all the lines I have 2163 | defined for this campaign. 2164 | 2165 | 2166 | 377 2167 | 00:23:23,206 --> 00:23:24,876 2168 | You can define more 2169 | lines if you want, 2170 | 2171 | 2172 | 378 2173 | 00:23:25,396 --> 00:23:27,726 2174 | but for now let's 2175 | leave it at one line. 2176 | 2177 | 2178 | 379 2179 | 00:23:29,246 --> 00:23:33,706 2180 | Click on "next" to 2181 | start creating your ad. 2182 | 2183 | 2184 | 380 2185 | 00:23:36,096 --> 00:23:39,996 2186 | Now, to define an ad you are 2187 | going to define your pre-tap 2188 | 2189 | 2190 | 381 2191 | 00:23:40,406 --> 00:23:41,706 2192 | and post-tap experience. 2193 | 2194 | 2195 | 382 2196 | 00:23:42,956 --> 00:23:46,096 2197 | For my ad, I want it to be 2198 | a banner before tapping; 2199 | 2200 | 2201 | 383 2202 | 00:23:46,786 --> 00:23:50,976 2203 | I want my ad to run on all 2204 | devices, iPhones, iPads, 2205 | 2206 | 2207 | 384 2208 | 00:23:51,126 --> 00:23:52,426 2209 | so I will choose universal. 2210 | 2211 | 2212 | 385 2213 | 00:23:52,956 --> 00:23:55,416 2214 | I choose my language. 2215 | 2216 | 2217 | 386 2218 | 00:23:56,056 --> 00:24:03,256 2219 | And for the creative, I can 2220 | use a standard set of templates 2221 | 2222 | 2223 | 387 2224 | 00:24:03,256 --> 00:24:07,296 2225 | that iAd WorkBench provides 2226 | me with various color schemes. 2227 | 2228 | 2229 | 388 2230 | 00:24:08,566 --> 00:24:11,606 2231 | Or if I want I can upload 2232 | images from my desktop. 2233 | 2234 | 2235 | 389 2236 | 00:24:12,766 --> 00:24:15,726 2237 | For now, let's quickly 2238 | use a standard template. 2239 | 2240 | 2241 | 390 2242 | 00:24:16,396 --> 00:24:29,636 2243 | I can give it a title, a message 2244 | for my new platinum pack, 2245 | 2246 | 2247 | 391 2248 | 00:24:31,256 --> 00:24:32,826 2249 | and a call to action text. 2250 | 2251 | 2252 | 392 2253 | 00:24:33,716 --> 00:24:39,866 2254 | As you can see, I get to see 2255 | the preview of how this is going 2256 | 2257 | 2258 | 393 2259 | 00:24:39,866 --> 00:24:42,226 2260 | to look on the devices. 2261 | 2262 | 2263 | 394 2264 | 00:24:42,556 --> 00:24:45,216 2265 | In fact, I can get a preview 2266 | of how it is going to look 2267 | 2268 | 2269 | 395 2270 | 00:24:45,216 --> 00:24:47,276 2271 | across all different devices. 2272 | 2273 | 2274 | 396 2275 | 00:24:50,996 --> 00:24:54,806 2276 | Now I want to choose what the 2277 | post-tap experience I want 2278 | 2279 | 2280 | 397 2281 | 00:24:54,806 --> 00:24:55,386 2282 | for the user. 2283 | 2284 | 2285 | 398 2286 | 00:24:56,096 --> 00:24:59,506 2287 | I am going to choose 2288 | ad deep link. 2289 | 2290 | 2291 | 399 2292 | 00:25:00,216 --> 00:25:02,756 2293 | Because in this case 2294 | for my platinum pack, 2295 | 2296 | 2297 | 400 2298 | 00:25:03,346 --> 00:25:07,116 2299 | every time the user clicks 2300 | on the banner, I want my app 2301 | 2302 | 2303 | 401 2304 | 00:25:07,626 --> 00:25:12,156 2305 | to open up on the device 2306 | and take the user directly 2307 | 2308 | 2309 | 402 2310 | 00:25:12,316 --> 00:25:15,436 2311 | into the page where 2312 | they can do the purchase 2313 | 2314 | 2315 | 403 2316 | 00:25:15,436 --> 00:25:19,866 2317 | of my platinum filter 2318 | pack, in-app purchase. 2319 | 2320 | 2321 | 404 2322 | 00:25:20,006 --> 00:25:24,436 2323 | In order to configure that, I 2324 | need to put in a deep link URL. 2325 | 2326 | 2327 | 405 2328 | 00:25:25,006 --> 00:25:32,556 2329 | I put in my custom scheme 2330 | and for filters, where I want 2331 | 2332 | 2333 | 406 2334 | 00:25:32,556 --> 00:25:37,186 2335 | to go directly to the page where 2336 | I can do an in-app purchase 2337 | 2338 | 2339 | 407 2340 | 00:25:37,646 --> 00:25:40,606 2341 | of the platinum filter pack. 2342 | 2343 | 2344 | 408 2345 | 00:25:40,806 --> 00:25:42,986 2346 | Now, most of the time 2347 | my app will be installed 2348 | 2349 | 2350 | 409 2351 | 00:25:42,986 --> 00:25:44,296 2352 | on the device of the user. 2353 | 2354 | 2355 | 410 2356 | 00:25:44,656 --> 00:25:47,856 2357 | But for some reason if 2358 | the app is not installed 2359 | 2360 | 2361 | 411 2362 | 00:25:48,286 --> 00:25:52,756 2363 | and after the user clicks on the 2364 | banner, I can take them directly 2365 | 2366 | 2367 | 412 2368 | 00:25:52,756 --> 00:25:56,906 2369 | to the iTunes App Store 2370 | page to re-download the app. 2371 | 2372 | 2373 | 413 2374 | 00:25:57,806 --> 00:26:00,076 2375 | Or if I want to take 2376 | them to another website 2377 | 2378 | 2379 | 414 2380 | 00:26:00,076 --> 00:26:02,006 2381 | of my choosing, I 2382 | could do that, too. 2383 | 2384 | 2385 | 415 2386 | 00:26:02,806 --> 00:26:10,046 2387 | For now I want to take 2388 | them to the download page. 2389 | 2390 | 2391 | 416 2392 | 00:26:10,736 --> 00:26:13,886 2393 | I will name the destination. 2394 | 2395 | 2396 | 417 2397 | 00:26:13,886 --> 00:26:14,746 2398 | LiteRight deep link. 2399 | 2400 | 2401 | 418 2402 | 00:26:16,036 --> 00:26:18,956 2403 | I associate the line which 2404 | I created to this ad. 2405 | 2406 | 2407 | 419 2408 | 00:26:20,456 --> 00:26:26,306 2409 | And name the ad. 2410 | 2411 | 2412 | 420 2413 | 00:26:26,876 --> 00:26:27,816 2414 | Click "next." 2415 | 2416 | 2417 | 421 2418 | 00:26:32,216 --> 00:26:35,366 2419 | On the next screen, you 2420 | get to see all the ads 2421 | 2422 | 2423 | 422 2424 | 00:26:35,456 --> 00:26:37,116 2425 | that you have created 2426 | for this campaign. 2427 | 2428 | 2429 | 423 2430 | 00:26:37,486 --> 00:26:38,656 2431 | We just created this ad. 2432 | 2433 | 2434 | 424 2435 | 00:26:39,366 --> 00:26:42,416 2436 | Again, you could create 2437 | more ads if you want to. 2438 | 2439 | 2440 | 425 2441 | 00:26:43,346 --> 00:26:47,016 2442 | But for now, let's 2443 | keep it at one. 2444 | 2445 | 2446 | 426 2447 | 00:26:47,136 --> 00:26:50,516 2448 | Click "next" to see the 2449 | summary of all the campaign set 2450 | 2451 | 2452 | 427 2453 | 00:26:50,516 --> 00:26:51,796 2454 | up you have done so far. 2455 | 2456 | 2457 | 428 2458 | 00:26:52,776 --> 00:26:54,396 2459 | I can see the line I created. 2460 | 2461 | 2462 | 429 2463 | 00:26:54,926 --> 00:26:57,726 2464 | I can see the ads which I 2465 | associated with the line. 2466 | 2467 | 2468 | 430 2469 | 00:26:58,506 --> 00:27:02,136 2470 | I can also enter my 2471 | payment information. 2472 | 2473 | 2474 | 431 2475 | 00:27:02,766 --> 00:27:05,216 2476 | Since iAd WorkBench, when 2477 | I signed up for that, 2478 | 2479 | 2480 | 432 2481 | 00:27:05,326 --> 00:27:09,606 2482 | already has my credit card, 2483 | I'm going to use just that. 2484 | 2485 | 2486 | 433 2487 | 00:27:10,296 --> 00:27:10,676 2488 | That's it. 2489 | 2490 | 2491 | 434 2492 | 00:27:10,676 --> 00:27:17,236 2493 | At this point of time, I go 2494 | and submit this campaign. 2495 | 2496 | 2497 | 435 2498 | 00:27:17,366 --> 00:27:19,026 2499 | Once you submit the campaign, 2500 | 2501 | 2502 | 436 2503 | 00:27:19,786 --> 00:27:22,636 2504 | all the ads that 2505 | you have created go 2506 | 2507 | 2508 | 437 2509 | 00:27:22,636 --> 00:27:24,296 2510 | through a certification process. 2511 | 2512 | 2513 | 438 2514 | 00:27:25,106 --> 00:27:27,546 2515 | And once they are all approved, 2516 | 2517 | 2518 | 439 2519 | 00:27:28,476 --> 00:27:31,186 2520 | and your line start 2521 | date is reached, 2522 | 2523 | 2524 | 440 2525 | 00:27:31,756 --> 00:27:33,226 2526 | your campaign will start running 2527 | 2528 | 2529 | 441 2530 | 00:27:33,656 --> 00:27:38,736 2531 | and your ads will start 2532 | serving on the devices. 2533 | 2534 | 2535 | 442 2536 | 00:27:38,836 --> 00:27:41,276 2537 | Now, let me show you after 2538 | you created a campaign, 2539 | 2540 | 2541 | 443 2542 | 00:27:41,766 --> 00:27:44,556 2543 | how do you monitor the 2544 | performance of your campaign? 2545 | 2546 | 2547 | 444 2548 | 00:27:46,196 --> 00:27:50,516 2549 | I recently ran a similar 2550 | campaign which just finished. 2551 | 2552 | 2553 | 445 2554 | 00:27:50,516 --> 00:27:55,086 2555 | So let me click on the analytics 2556 | section of the campaign card 2557 | 2558 | 2559 | 446 2560 | 00:27:55,736 --> 00:28:08,866 2561 | to go to the analytics, to 2562 | the analytics dashboard page. 2563 | 2564 | 2565 | 447 2566 | 00:28:10,156 --> 00:28:15,186 2567 | Here you can see for the 2568 | campaign, various metrics. 2569 | 2570 | 2571 | 448 2572 | 00:28:16,296 --> 00:28:18,376 2573 | The total spent, the 2574 | total impressions, 2575 | 2576 | 2577 | 449 2578 | 00:28:18,936 --> 00:28:23,016 2579 | the total conversions, 2580 | all those things. 2581 | 2582 | 2583 | 450 2584 | 00:28:23,176 --> 00:28:27,426 2585 | I can also slice and dice 2586 | this data by filtering 2587 | 2588 | 2589 | 451 2590 | 00:28:27,426 --> 00:28:28,946 2591 | by a particular date range. 2592 | 2593 | 2594 | 452 2595 | 00:28:29,596 --> 00:28:33,336 2596 | Or I can view the data 2597 | at the campaign level 2598 | 2599 | 2600 | 453 2601 | 00:28:33,716 --> 00:28:37,506 2602 | or at the line level, 2603 | even at the ad level 2604 | 2605 | 2606 | 454 2607 | 00:28:37,506 --> 00:28:38,826 2608 | or the device type level. 2609 | 2610 | 2611 | 455 2612 | 00:28:39,356 --> 00:28:46,406 2613 | In the graph which you see I can 2614 | plot a particular metric, like, 2615 | 2616 | 2617 | 456 2618 | 00:28:46,406 --> 00:28:51,376 2619 | for example, the spend per day 2620 | across my campaign time period. 2621 | 2622 | 2623 | 457 2624 | 00:28:52,336 --> 00:28:55,666 2625 | Or I can also overlay 2626 | with other metrics. 2627 | 2628 | 2629 | 458 2630 | 00:28:55,966 --> 00:28:59,276 2631 | For example, impressions 2632 | over time. 2633 | 2634 | 2635 | 459 2636 | 00:28:59,996 --> 00:29:03,236 2637 | Or taps over time. 2638 | 2639 | 2640 | 460 2641 | 00:29:03,456 --> 00:29:07,116 2642 | If I prefer to do all the 2643 | slicing and dicing offline, 2644 | 2645 | 2646 | 461 2647 | 00:29:07,676 --> 00:29:16,656 2648 | I can always download this data 2649 | using the download icon here. 2650 | 2651 | 2652 | 462 2653 | 00:29:16,876 --> 00:29:18,646 2654 | All this UI functionality 2655 | 2656 | 2657 | 463 2658 | 00:29:19,226 --> 00:29:25,586 2659 | and analytics reporting I can 2660 | also use the iAd's advertising 2661 | 2662 | 2663 | 464 2664 | 00:29:25,586 --> 00:29:27,956 2665 | API if I prefer so. 2666 | 2667 | 2668 | 465 2669 | 00:29:28,896 --> 00:29:31,616 2670 | There are so many other things 2671 | you can do with iAd WorkBench, 2672 | 2673 | 2674 | 466 2675 | 00:29:32,206 --> 00:29:35,586 2676 | but for now I will 2677 | hand it back to Carol. 2678 | 2679 | 2680 | 467 2681 | 00:29:35,736 --> 00:29:35,946 2682 | Carol? 2683 | 2684 | 2685 | 468 2686 | 00:29:36,516 --> 00:29:42,736 2687 | [Applause] 2688 | 2689 | 2690 | 469 2691 | 00:29:43,236 --> 00:29:44,146 2692 | >> CAROL TENG: Thanks, Shashank. 2693 | 2694 | 2695 | 470 2696 | 00:29:44,146 --> 00:29:46,876 2697 | As you can see from that demo 2698 | 2699 | 2700 | 471 2701 | 00:29:46,876 --> 00:29:50,656 2702 | of iAd WorkBench I have 2703 | full control to set up 2704 | 2705 | 2706 | 472 2707 | 00:29:50,656 --> 00:29:52,606 2708 | and run campaigns 2709 | to promote my app 2710 | 2711 | 2712 | 473 2713 | 00:29:53,676 --> 00:29:56,506 2714 | and in the reporting screens I 2715 | can see how well my campaigns 2716 | 2717 | 2718 | 474 2719 | 00:29:56,506 --> 00:29:56,996 2720 | are doing. 2721 | 2722 | 2723 | 475 2724 | 00:29:58,346 --> 00:30:01,036 2725 | Not only can I do this 2726 | inside of iAd WorkBench, 2727 | 2728 | 2729 | 476 2730 | 00:30:01,726 --> 00:30:04,836 2731 | but I can also use 2732 | iAd's attribution API 2733 | 2734 | 2735 | 477 2736 | 00:30:05,616 --> 00:30:08,326 2737 | to measure the effectiveness 2738 | and track app downloads 2739 | 2740 | 2741 | 478 2742 | 00:30:08,376 --> 00:30:10,426 2743 | that originated from 2744 | iAd campaigns. 2745 | 2746 | 2747 | 479 2748 | 00:30:11,136 --> 00:30:15,676 2749 | It is a method of the AD 2750 | client class called 'look 2751 | 2752 | 2753 | 480 2754 | 00:30:15,676 --> 00:30:19,106 2755 | up ad conversion details,' 2756 | which returns two dates. 2757 | 2758 | 2759 | 481 2760 | 00:30:19,676 --> 00:30:24,426 2761 | The first is the app download 2762 | date, which is the date 2763 | 2764 | 2765 | 482 2766 | 00:30:24,536 --> 00:30:26,586 2767 | that the user downloaded 2768 | the app. 2769 | 2770 | 2771 | 483 2772 | 00:30:28,436 --> 00:30:30,546 2773 | The second is the 2774 | last click date, 2775 | 2776 | 2777 | 484 2778 | 00:30:30,546 --> 00:30:33,566 2779 | and this would be the last 2780 | date that the user clicked 2781 | 2782 | 2783 | 485 2784 | 00:30:33,566 --> 00:30:37,726 2785 | on the ad prior to the 2786 | purchase of the app. 2787 | 2788 | 2789 | 486 2790 | 00:30:37,986 --> 00:30:40,576 2791 | If both of these dates 2792 | are there and true, 2793 | 2794 | 2795 | 487 2796 | 00:30:40,576 --> 00:30:44,686 2797 | that means this app download 2798 | is directly attributable 2799 | 2800 | 2801 | 488 2802 | 00:30:44,746 --> 00:30:47,956 2803 | to the user interacting 2804 | with and clicking on an iAd 2805 | 2806 | 2807 | 489 2808 | 00:30:48,356 --> 00:30:50,286 2809 | that is promoting my app. 2810 | 2811 | 2812 | 490 2813 | 00:30:52,836 --> 00:30:53,896 2814 | So that's it. 2815 | 2816 | 2817 | 491 2818 | 00:30:54,676 --> 00:30:57,886 2819 | Over this imaginary 2820 | journey of developing 2821 | 2822 | 2823 | 492 2824 | 00:30:57,886 --> 00:31:01,176 2825 | and launching the LiteRight 2826 | app, I hope you've seen how 2827 | 2828 | 2829 | 493 2830 | 00:31:01,176 --> 00:31:03,606 2831 | to apply the best 2832 | practices of some 2833 | 2834 | 2835 | 494 2836 | 00:31:03,606 --> 00:31:05,746 2837 | of the most successful 2838 | app developers. 2839 | 2840 | 2841 | 495 2842 | 00:31:06,326 --> 00:31:11,476 2843 | Even as early as the design 2844 | phase, they are already thinking 2845 | 2846 | 2847 | 496 2848 | 00:31:11,476 --> 00:31:13,786 2849 | about the business model 2850 | and how they are going 2851 | 2852 | 2853 | 497 2854 | 00:31:13,786 --> 00:31:15,866 2855 | to monetize their app. 2856 | 2857 | 2858 | 498 2859 | 00:31:16,896 --> 00:31:20,786 2860 | And with just a few lines of 2861 | code, you saw how easy it was 2862 | 2863 | 2864 | 499 2865 | 00:31:20,896 --> 00:31:22,776 2866 | to integrate iAd into your app 2867 | 2868 | 2869 | 500 2870 | 00:31:23,746 --> 00:31:27,316 2871 | and start generating revenue 2872 | even as early as launch. 2873 | 2874 | 2875 | 501 2876 | 00:31:27,846 --> 00:31:33,236 2877 | Then we talked about the best 2878 | practices for growing your app 2879 | 2880 | 2881 | 502 2882 | 00:31:33,526 --> 00:31:36,496 2883 | by investing wisely to 2884 | promote to your users, 2885 | 2886 | 2887 | 503 2888 | 00:31:37,436 --> 00:31:41,196 2889 | how to instrument your app to 2890 | identify and segment your users 2891 | 2892 | 2893 | 504 2894 | 00:31:41,786 --> 00:31:44,556 2895 | so you can better understand 2896 | the various audiences 2897 | 2898 | 2899 | 505 2900 | 00:31:44,556 --> 00:31:45,696 2901 | that you are trying to address. 2902 | 2903 | 2904 | 506 2905 | 00:31:46,296 --> 00:31:50,226 2906 | How to target them 2907 | with relevant messaging 2908 | 2909 | 2910 | 507 2911 | 00:31:50,226 --> 00:31:52,326 2912 | and engaging ad experiences, 2913 | 2914 | 2915 | 508 2916 | 00:31:53,226 --> 00:31:56,616 2917 | so your campaigns will be 2918 | more effective and efficient 2919 | 2920 | 2921 | 509 2922 | 00:31:56,826 --> 00:31:59,246 2923 | at driving downloads 2924 | and in-app purchases. 2925 | 2926 | 2927 | 510 2928 | 00:31:59,756 --> 00:32:02,826 2929 | And how to continuously monitor 2930 | 2931 | 2932 | 511 2933 | 00:32:02,826 --> 00:32:06,156 2934 | and measure campaign 2935 | effectiveness using iAd 2936 | 2937 | 2938 | 512 2939 | 00:32:06,156 --> 00:32:08,546 2940 | WorkBench and the 2941 | attribution API. 2942 | 2943 | 2944 | 513 2945 | 00:32:11,916 --> 00:32:15,536 2946 | These are all the reasons 2947 | that iAd is a great toolset 2948 | 2949 | 2950 | 514 2951 | 00:32:15,536 --> 00:32:17,116 2952 | for every app developer. 2953 | 2954 | 2955 | 515 2956 | 00:32:17,796 --> 00:32:20,936 2957 | It is easy to leverage 2958 | iAd wherever you are 2959 | 2960 | 2961 | 516 2962 | 00:32:20,936 --> 00:32:24,746 2963 | in your app development process 2964 | to impact the future success 2965 | 2966 | 2967 | 517 2968 | 00:32:24,836 --> 00:32:27,166 2969 | of your app and just 2970 | as important, 2971 | 2972 | 2973 | 518 2974 | 00:32:27,536 --> 00:32:29,526 2975 | the future success 2976 | of your business. 2977 | 2978 | 2979 | 519 2980 | 00:32:30,106 --> 00:32:32,566 2981 | And one more thing. 2982 | 2983 | 2984 | 520 2985 | 00:32:33,126 --> 00:32:36,846 2986 | For those of you who are 2987 | publishers of content 2988 | 2989 | 2990 | 521 2991 | 00:32:37,146 --> 00:32:39,486 2992 | for the new news app that 2993 | was announced yesterday, 2994 | 2995 | 2996 | 522 2997 | 00:32:39,486 --> 00:32:44,786 2998 | you will be able to monetize and 2999 | promote your content using iAd. 3000 | 3001 | 3002 | 523 3003 | 00:32:46,136 --> 00:32:47,756 3004 | Go to the news publisher page 3005 | 3006 | 3007 | 524 3008 | 00:32:47,976 --> 00:32:50,786 3009 | on the Apple developer 3010 | site for more information. 3011 | 3012 | 3013 | 525 3014 | 00:32:51,626 --> 00:32:54,966 3015 | And for more information 3016 | about iAd, you can refer 3017 | 3018 | 3019 | 526 3020 | 00:32:54,966 --> 00:32:58,206 3021 | to the iAd Developer Guide 3022 | and iAd Developer Forums, 3023 | 3024 | 3025 | 527 3026 | 00:32:58,546 --> 00:33:01,786 3027 | or contact our Technology 3028 | Evangelist Team. 3029 | 3030 | 3031 | 528 3032 | 00:33:03,376 --> 00:33:06,446 3033 | There's also a related iTunes 3034 | Connect session tomorrow. 3035 | 3036 | 3037 | 529 3038 | 00:33:07,516 --> 00:33:08,956 3039 | Thank you, and enjoy the 3040 | rest of the conference. 3041 | 3042 | 3043 | 530 3044 | 00:33:09,516 --> 00:33:12,500 3045 | [Applause] 3046 | 3047 | -------------------------------------------------------------------------------- /wwdc2015-全集-标清下载地址.txt: -------------------------------------------------------------------------------- 1 | http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_sd_introducing_safari_view_controller.mp4?dl=1 2 | http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_sd_layout_and_animation_techniques_for_watchkit.mp4?dl=1 3 | http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_sd_advanced_nsoperations.mp4?dl=1 4 | http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_sd_building_document_based_apps.mp4?dl=1 5 | http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_sd_creating_complications_with_clockkit.mp4?dl=1 6 | http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_sd_apple_watch_accessibility.mp4?dl=1 7 | http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_sd_networking_with_nsurlsession.mp4?dl=1 8 | http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_sd_whats_new_in_web_development_in_webkit_and_safari.mp4?dl=1 9 | http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_sd_supporting_the_enterprise_with_os_x_automation.mp4?dl=1 10 | http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_sd_whats_new_in_mapkit.mp4?dl=1 11 | http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_sd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.mp4?dl=1 12 | http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_sd_introducing_gameplaykit.mp4?dl=1 13 | http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_sd_whats_new_in_uikit_dynamics_and_visual_effects.mp4?dl=1 14 | http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_sd_designing_for_apple_watch.mp4?dl=1 15 | http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_sd_cocoa_touch_best_practices.mp4?dl=1 16 | http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_sd_cloudkit_js_and_web_services.mp4?dl=1 17 | http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_sd_mysteries_of_auto_layout_part_2.mp4?dl=1 18 | http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_sd_metal_performance_optimization_techniques.mp4?dl=1 19 | http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_sd_privacy_and_your_app.mp4?dl=1 20 | http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_sd_authoring_rich_playgrounds.mp4?dl=1 21 | http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_sd_whats_new_in_metal_part_2.mp4?dl=1 22 | http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_sd_your_app_and_next_generation_networks.mp4?dl=1 23 | http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_sd_watchkit_indepth_part_1.mp4?dl=1 24 | http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_sd_swift_and_objectivec_interoperability.mp4?dl=1 25 | http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_sd_content_protection_for_http_live_streaming.mp4?dl=1 26 | http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_sd_debugging_energy_issues.mp4?dl=1 27 | http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_sd_managing_3d_assets_with_model_io.mp4?dl=1 28 | http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_sd_audio_unit_extensions.mp4?dl=1 29 | http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_sd_monetize_and_promote_your_app_with_iad.mp4?dl=1 30 | http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_sd_whats_new_in_core_audio.mp4?dl=1 31 | http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_sd_enhancements_to_scenekit.mp4?dl=1 32 | http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_sd_building_responsive_and_efficient_apps_with_gcd.mp4?dl=1 33 | http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_sd_app_extension_best_practices.mp4?dl=1 34 | http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_sd_optimizing_swift_performance.mp4?dl=1 35 | http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_sd_ui_testing_in_xcode.mp4?dl=1 36 | http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_sd_deeper_into_gameplaykit_with_demobots.mp4?dl=1 37 | http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_sd_apple_watch_design_tips_and_tricks.mp4?dl=1 38 | http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_sd_profiling_in_depth.mp4?dl=1 39 | http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_sd_getting_started_with_multitasking_on_ipad_in_ios_9.mp4?dl=1 40 | http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_sd_achieving_allday_battery_life.mp4?dl=1 41 | http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_sd_app_thinning_in_xcode.mp4?dl=1 42 | http://devstreaming.apple.com/videos/wwdc/2015/103ot7lzkdri2fvn1iyh/103/103_sd_apple_design_awards.mp4?dl=1 43 | http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_sd_designing_with_animation.mp4?dl=1 44 | http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_sd_seamless_linking_to_your_app.mp4?dl=1 45 | http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_sd_whats_new_in_core_data.mp4?dl=1 46 | http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_sd_whats_new_in_core_image.mp4?dl=1 47 | http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_sd_whats_new_in_swift.mp4?dl=1 48 | http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_sd_introducing_search_apis.mp4?dl=1 49 | http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_sd_using_safari_to_deliver_and_debug_a_responsive_web_design.mp4?dl=1 50 | http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_sd_ios_accessibility.mp4?dl=1 51 | http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_sd_swift_in_practice.mp4?dl=1 52 | http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_sd_new_uikit_support_for_international_user_interfaces.mp4?dl=1 53 | http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_sd_best_practices_for_progress_reporting.mp4?dl=1 54 | http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_sd_adopting_new_trackpad_features.mp4?dl=1 55 | http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_sd_introducing_watch_connectivity.mp4?dl=1 56 | http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_sd_mysteries_of_auto_layout_part_1.mp4?dl=1 57 | http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_sd_safari_extensibility_content_blocking_and_shared_links.mp4?dl=1 58 | http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_sd_low_energy_high_performance_compression_and_accelerate.mp4?dl=1 59 | http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_sd_implementing_ui_designs_in_interface_builder.mp4?dl=1 60 | http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_sd_whats_new_in_nscollectionview.mp4?dl=1 61 | http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_sd_continuous_integration_and_code_coverage_in_xcode.mp4?dl=1 62 | http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_sd_security_and_your_apps.mp4?dl=1 63 | http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_sd_whats_new_in_cocoa_touch.mp4?dl=1 64 | http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_sd_improving_the_full_screen_window_experience.mp4?dl=1 65 | http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_sd_watchkit_indepth_part_2.mp4?dl=1 66 | http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_sd_apple_pay_within_apps.mp4?dl=1 67 | http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_sd_designing_for_future_hardware.mp4?dl=1 68 | http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_sd_getting_the_most_out_of_app_analytics.mp4?dl=1 69 | http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_sd_building_watch_apps.mp4?dl=1 70 | http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_sd_building_apps_with_researchkit.mp4?dl=1 71 | http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_sd_wallet__the_home_for_apple_pay_and_more.mp4?dl=1 72 | http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_sd_introducing_the_new_system_fonts.mp4?dl=1 73 | http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_sd_whats_new_in_network_extension_and_vpn.mp4?dl=1 74 | http://devstreaming.apple.com/videos/wwdc/2015/1014o78qhj07pbfxt9g7/101/101_sd_keynote.mp4?dl=1 75 | http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_sd_whats_new_in_core_location.mp4?dl=1 76 | http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_sd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.mp4?dl=1 77 | http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_sd_editing_movies_in_av_foundation.mp4?dl=1 78 | http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_sd_protocoloriented_programming_in_swift.mp4?dl=1 79 | http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_sd_performance_on_ios_and_watchos.mp4?dl=1 80 | http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_sd_platforms_state_of_the_union.mp4?dl=1 81 | http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_sd_whats_new_in_cloudkit.mp4?dl=1 82 | http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_sd_introducing_on_demand_resources.mp4?dl=1 83 | http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_sd_whats_new_in_core_motion.mp4?dl=1 84 | http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_sd_whats_new_in_storyboards.mp4?dl=1 85 | http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_sd_whats_new_in_itunes_connect.mp4?dl=1 86 | http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_sd_whats_new_in_xcode.mp4?dl=1 87 | http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_sd_whats_new_in_internationalization.mp4?dl=1 88 | http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_sd_watchkit_tips_and_tricks.mp4?dl=1 89 | http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_sd_going_social_with_replaykit_and_game_center.mp4?dl=1 90 | http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_sd_whats_new_in_managing_apple_devices.mp4?dl=1 91 | http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_sd_advanced_touch_input_on_ios.mp4?dl=1 92 | http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_sd_building_better_apps_with_value_types_in_swift.mp4?dl=1 93 | http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_sd_improving_your_existing_apps_with_swift.mp4?dl=1 94 | http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_sd_cloudkit_tips_and_tricks.mp4?dl=1 95 | http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_sd_itunes_connect_development_to_distribution.mp4?dl=1 96 | http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_sd_whats_new_in_metal_part_1.mp4?dl=1 97 | http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_sd_whats_new_in_healthkit.mp4?dl=1 98 | http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_sd_introducing_watchkit_for_watchos_2.mp4?dl=1 99 | http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_sd_whats_new_in_homekit.mp4?dl=1 100 | http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_sd_whats_new_in_notifications.mp4?dl=1 101 | http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_sd_whats_new_in_cocoa.mp4?dl=1 102 | http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_sd_whats_new_in_spritekit.mp4?dl=1 103 | http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_sd_introducing_the_contacts_framework_for_ios_and_os_x.mp4?dl=1 104 | http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_sd_whats_new_in_lldb.mp4?dl=1 -------------------------------------------------------------------------------- /wwdc2015-全集-课件pdf.txt: -------------------------------------------------------------------------------- 1 | http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_introducing_safari_view_controller.pdf?dl=1 2 | http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_layout_and_animation_techniques_for_watchkit.pdf?dl=1 3 | http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_advanced_nsoperations.pdf?dl=1 4 | http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_building_document_based_apps.pdf?dl=1 5 | http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_creating_complications_with_clockkit.pdf?dl=1 6 | http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_apple_watch_accessibility.pdf?dl=1 7 | http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_networking_with_nsurlsession.pdf?dl=1 8 | http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_whats_new_in_web_development_in_webkit_and_safari.pdf?dl=1 9 | http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_supporting_the_enterprise_with_os_x_automation.pdf?dl=1 10 | http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_whats_new_in_mapkit.pdf?dl=1 11 | http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.pdf?dl=1 12 | http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_introducing_gameplaykit.pdf?dl=1 13 | http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_whats_new_in_uikit_dynamics_and_visual_effects.pdf?dl=1 14 | http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_designing_for_apple_watch.pdf?dl=1 15 | http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_cocoa_touch_best_practices.pdf?dl=1 16 | http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_cloudkit_js_and_web_services.pdf?dl=1 17 | http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_mysteries_of_auto_layout_part_2.pdf?dl=1 18 | http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_metal_performance_optimization_techniques.pdf?dl=1 19 | http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_privacy_and_your_app.pdf?dl=1 20 | http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_authoring_rich_playgrounds.pdf?dl=1 21 | http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_whats_new_in_metal_part_2.pdf?dl=1 22 | http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_your_app_and_next_generation_networks.pdf?dl=1 23 | http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_watchkit_indepth_part_1.pdf?dl=1 24 | http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_swift_and_objectivec_interoperability.pdf?dl=1 25 | http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_content_protection_for_http_live_streaming.pdf?dl=1 26 | http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_debugging_energy_issues.pdf?dl=1 27 | http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_managing_3d_assets_with_model_io.pdf?dl=1 28 | http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_audio_unit_extensions.pdf?dl=1 29 | http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_monetize_and_promote_your_app_with_iad.pdf?dl=1 30 | http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_whats_new_in_core_audio.pdf?dl=1 31 | http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_enhancements_to_scenekit.pdf?dl=1 32 | http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_building_responsive_and_efficient_apps_with_gcd.pdf?dl=1 33 | http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_app_extension_best_practices.pdf?dl=1 34 | http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_optimizing_swift_performance.pdf?dl=1 35 | http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_ui_testing_in_xcode.pdf?dl=1 36 | http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_deeper_into_gameplaykit_with_demobots.pdf?dl=1 37 | http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_apple_watch_design_tips_and_tricks.pdf?dl=1 38 | http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_profiling_in_depth.pdf?dl=1 39 | http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_getting_started_with_multitasking_on_ipad_in_ios_9.pdf?dl=1 40 | http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_achieving_allday_battery_life.pdf?dl=1 41 | http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_app_thinning_in_xcode.pdf?dl=1 42 | 43 | http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_designing_with_animation.pdf?dl=1 44 | http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_seamless_linking_to_your_app.pdf?dl=1 45 | http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_whats_new_in_core_data.pdf?dl=1 46 | http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_whats_new_in_core_image.pdf?dl=1 47 | http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_whats_new_in_swift.pdf?dl=1 48 | http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_introducing_search_apis.pdf?dl=1 49 | http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_using_safari_to_deliver_and_debug_a_responsive_web_design.pdf?dl=1 50 | http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_ios_accessibility.pdf?dl=1 51 | http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_swift_in_practice.pdf?dl=1 52 | http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_new_uikit_support_for_international_user_interfaces.pdf?dl=1 53 | http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_best_practices_for_progress_reporting.pdf?dl=1 54 | http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_adopting_new_trackpad_features.pdf?dl=1 55 | http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_introducing_watch_connectivity.pdf?dl=1 56 | http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_mysteries_of_auto_layout_part_1.pdf?dl=1 57 | http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_safari_extensibility_content_blocking_and_shared_links.pdf?dl=1 58 | http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_low_energy_high_performance_compression_and_accelerate.pdf?dl=1 59 | http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_implementing_ui_designs_in_interface_builder.pdf?dl=1 60 | http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_whats_new_in_nscollectionview.pdf?dl=1 61 | http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_continuous_integration_and_code_coverage_in_xcode.pdf?dl=1 62 | http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_security_and_your_apps.pdf?dl=1 63 | http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_whats_new_in_cocoa_touch.pdf?dl=1 64 | http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_improving_the_full_screen_window_experience.pdf?dl=1 65 | http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_watchkit_indepth_part_2.pdf?dl=1 66 | http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_apple_pay_within_apps.pdf?dl=1 67 | http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_designing_for_future_hardware.pdf?dl=1 68 | http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_getting_the_most_out_of_app_analytics.pdf?dl=1 69 | http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_building_watch_apps.pdf?dl=1 70 | http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_building_apps_with_researchkit.pdf?dl=1 71 | http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_wallet__the_home_for_apple_pay_and_more.pdf?dl=1 72 | http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_introducing_the_new_system_fonts.pdf?dl=1 73 | http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_whats_new_in_network_extension_and_vpn.pdf?dl=1 74 | 75 | 76 | http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.pdf?dl=1 77 | http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_editing_movies_in_av_foundation.pdf?dl=1 78 | http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_protocoloriented_programming_in_swift.pdf?dl=1 79 | http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_performance_on_ios_and_watchos.pdf?dl=1 80 | http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_platforms_state_of_the_union.pdf?dl=1 81 | http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_whats_new_in_cloudkit.pdf?dl=1 82 | http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_introducing_on_demand_resources.pdf?dl=1 83 | http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_whats_new_in_core_motion.pdf?dl=1 84 | http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_whats_new_in_storyboards.pdf?dl=1 85 | http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_whats_new_in_itunes_connect.pdf?dl=1 86 | http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_whats_new_in_xcode.pdf?dl=1 87 | http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_whats_new_in_internationalization.pdf?dl=1 88 | http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_watchkit_tips_and_tricks.pdf?dl=1 89 | http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_going_social_with_replaykit_and_game_center.pdf?dl=1 90 | http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_whats_new_in_managing_apple_devices.pdf?dl=1 91 | http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_advanced_touch_input_on_ios.pdf?dl=1 92 | http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_building_better_apps_with_value_types_in_swift.pdf?dl=1 93 | http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_improving_your_existing_apps_with_swift.pdf?dl=1 94 | http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_cloudkit_tips_and_tricks.pdf?dl=1 95 | http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_itunes_connect_development_to_distribution.pdf?dl=1 96 | http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_whats_new_in_metal_part_1.pdf?dl=1 97 | http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_whats_new_in_healthkit.pdf?dl=1 98 | http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_introducing_watchkit_for_watchos_2.pdf?dl=1 99 | http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_whats_new_in_homekit.pdf?dl=1 100 | http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_whats_new_in_notifications.pdf?dl=1 101 | http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_whats_new_in_cocoa.pdf?dl=1 102 | http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_whats_new_in_spritekit.pdf?dl=1 103 | http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_introducing_the_contacts_framework_for_ios_and_os_x.pdf?dl=1 104 | http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_whats_new_in_lldb.pdf?dl=1 -------------------------------------------------------------------------------- /wwdc2015-全集-高清下载地址.txt: -------------------------------------------------------------------------------- 1 | http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_hd_introducing_safari_view_controller.mp4?dl=1 2 | http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_hd_layout_and_animation_techniques_for_watchkit.mp4?dl=1 3 | http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_hd_advanced_nsoperations.mp4?dl=1 4 | http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_hd_building_document_based_apps.mp4?dl=1 5 | http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_hd_creating_complications_with_clockkit.mp4?dl=1 6 | http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_hd_apple_watch_accessibility.mp4?dl=1 7 | http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_hd_networking_with_nsurlsession.mp4?dl=1 8 | http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_hd_whats_new_in_web_development_in_webkit_and_safari.mp4?dl=1 9 | http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_hd_supporting_the_enterprise_with_os_x_automation.mp4?dl=1 10 | http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_hd_whats_new_in_mapkit.mp4?dl=1 11 | http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_hd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.mp4?dl=1 12 | http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_hd_introducing_gameplaykit.mp4?dl=1 13 | http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_hd_whats_new_in_uikit_dynamics_and_visual_effects.mp4?dl=1 14 | http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_hd_designing_for_apple_watch.mp4?dl=1 15 | http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_hd_cocoa_touch_best_practices.mp4?dl=1 16 | http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_hd_cloudkit_js_and_web_services.mp4?dl=1 17 | http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_hd_mysteries_of_auto_layout_part_2.mp4?dl=1 18 | http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_hd_metal_performance_optimization_techniques.mp4?dl=1 19 | http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_hd_privacy_and_your_app.mp4?dl=1 20 | http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_hd_authoring_rich_playgrounds.mp4?dl=1 21 | http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_hd_whats_new_in_metal_part_2.mp4?dl=1 22 | http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_hd_your_app_and_next_generation_networks.mp4?dl=1 23 | http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_hd_watchkit_indepth_part_1.mp4?dl=1 24 | http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_hd_swift_and_objectivec_interoperability.mp4?dl=1 25 | http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_hd_content_protection_for_http_live_streaming.mp4?dl=1 26 | http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_hd_debugging_energy_issues.mp4?dl=1 27 | http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_hd_managing_3d_assets_with_model_io.mp4?dl=1 28 | http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_hd_audio_unit_extensions.mp4?dl=1 29 | http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_hd_monetize_and_promote_your_app_with_iad.mp4?dl=1 30 | http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_hd_whats_new_in_core_audio.mp4?dl=1 31 | http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_hd_enhancements_to_scenekit.mp4?dl=1 32 | http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_hd_building_responsive_and_efficient_apps_with_gcd.mp4?dl=1 33 | http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_hd_app_extension_best_practices.mp4?dl=1 34 | http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_hd_optimizing_swift_performance.mp4?dl=1 35 | http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_hd_ui_testing_in_xcode.mp4?dl=1 36 | http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_hd_deeper_into_gameplaykit_with_demobots.mp4?dl=1 37 | http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_hd_apple_watch_design_tips_and_tricks.mp4?dl=1 38 | http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_hd_profiling_in_depth.mp4?dl=1 39 | http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_hd_getting_started_with_multitasking_on_ipad_in_ios_9.mp4?dl=1 40 | http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_hd_achieving_allday_battery_life.mp4?dl=1 41 | http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_hd_app_thinning_in_xcode.mp4?dl=1 42 | http://devstreaming.apple.com/videos/wwdc/2015/103ot7lzkdri2fvn1iyh/103/103_hd_apple_design_awards.mp4?dl=1 43 | http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_hd_designing_with_animation.mp4?dl=1 44 | http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_hd_seamless_linking_to_your_app.mp4?dl=1 45 | http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_hd_whats_new_in_core_data.mp4?dl=1 46 | http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_hd_whats_new_in_core_image.mp4?dl=1 47 | http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_hd_whats_new_in_swift.mp4?dl=1 48 | http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_hd_introducing_search_apis.mp4?dl=1 49 | http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_hd_using_safari_to_deliver_and_debug_a_responsive_web_design.mp4?dl=1 50 | http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_hd_ios_accessibility.mp4?dl=1 51 | http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_hd_swift_in_practice.mp4?dl=1 52 | http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_hd_new_uikit_support_for_international_user_interfaces.mp4?dl=1 53 | http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_hd_best_practices_for_progress_reporting.mp4?dl=1 54 | http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_hd_adopting_new_trackpad_features.mp4?dl=1 55 | http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_hd_introducing_watch_connectivity.mp4?dl=1 56 | http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_hd_mysteries_of_auto_layout_part_1.mp4?dl=1 57 | http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_hd_safari_extensibility_content_blocking_and_shared_links.mp4?dl=1 58 | http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_hd_low_energy_high_performance_compression_and_accelerate.mp4?dl=1 59 | http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_hd_implementing_ui_designs_in_interface_builder.mp4?dl=1 60 | http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_hd_whats_new_in_nscollectionview.mp4?dl=1 61 | http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_hd_continuous_integration_and_code_coverage_in_xcode.mp4?dl=1 62 | http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_hd_security_and_your_apps.mp4?dl=1 63 | http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_hd_whats_new_in_cocoa_touch.mp4?dl=1 64 | http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_hd_improving_the_full_screen_window_experience.mp4?dl=1 65 | http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_hd_watchkit_indepth_part_2.mp4?dl=1 66 | http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_hd_apple_pay_within_apps.mp4?dl=1 67 | http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_hd_designing_for_future_hardware.mp4?dl=1 68 | http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_hd_getting_the_most_out_of_app_analytics.mp4?dl=1 69 | http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_hd_building_watch_apps.mp4?dl=1 70 | http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_hd_building_apps_with_researchkit.mp4?dl=1 71 | http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_hd_wallet__the_home_for_apple_pay_and_more.mp4?dl=1 72 | http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_hd_introducing_the_new_system_fonts.mp4?dl=1 73 | http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_hd_whats_new_in_network_extension_and_vpn.mp4?dl=1 74 | http://devstreaming.apple.com/videos/wwdc/2015/1014o78qhj07pbfxt9g7/101/101_hd_keynote.mp4?dl=1 75 | http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_hd_whats_new_in_core_location.mp4?dl=1 76 | http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_hd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.mp4?dl=1 77 | http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_hd_editing_movies_in_av_foundation.mp4?dl=1 78 | http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_hd_protocoloriented_programming_in_swift.mp4?dl=1 79 | http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_hd_performance_on_ios_and_watchos.mp4?dl=1 80 | http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_hd_platforms_state_of_the_union.mp4?dl=1 81 | http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_hd_whats_new_in_cloudkit.mp4?dl=1 82 | http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_hd_introducing_on_demand_resources.mp4?dl=1 83 | http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_hd_whats_new_in_core_motion.mp4?dl=1 84 | http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_hd_whats_new_in_storyboards.mp4?dl=1 85 | http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_hd_whats_new_in_itunes_connect.mp4?dl=1 86 | http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_hd_whats_new_in_xcode.mp4?dl=1 87 | http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_hd_whats_new_in_internationalization.mp4?dl=1 88 | http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_hd_watchkit_tips_and_tricks.mp4?dl=1 89 | http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_hd_going_social_with_replaykit_and_game_center.mp4?dl=1 90 | http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_hd_whats_new_in_managing_apple_devices.mp4?dl=1 91 | http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_hd_advanced_touch_input_on_ios.mp4?dl=1 92 | http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_hd_building_better_apps_with_value_types_in_swift.mp4?dl=1 93 | http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_hd_improving_your_existing_apps_with_swift.mp4?dl=1 94 | http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_hd_cloudkit_tips_and_tricks.mp4?dl=1 95 | http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_hd_itunes_connect_development_to_distribution.mp4?dl=1 96 | http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_hd_whats_new_in_metal_part_1.mp4?dl=1 97 | http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_hd_whats_new_in_healthkit.mp4?dl=1 98 | http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_hd_introducing_watchkit_for_watchos_2.mp4?dl=1 99 | http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_hd_whats_new_in_homekit.mp4?dl=1 100 | http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_hd_whats_new_in_notifications.mp4?dl=1 101 | http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_hd_whats_new_in_cocoa.mp4?dl=1 102 | http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_hd_whats_new_in_spritekit.mp4?dl=1 103 | http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_hd_introducing_the_contacts_framework_for_ios_and_os_x.mp4?dl=1 104 | http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_hd_whats_new_in_lldb.mp4?dl=1 -------------------------------------------------------------------------------- /wwdc2015-单项课件及视频下载地址.md: -------------------------------------------------------------------------------- 1 | # WWDC2015 2 | WWDC2015下载链接 3 | 4 | 所有[SD](wwdc2015-sd.txt)的下载链接,所有[HD](wwdc2015-hd.txt)的下载链接,所有[PDF](wwdc2015-pdf.txt)的下载链接 5 | 6 | Introducing Safari View Controller: 7 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_sd_introducing_safari_view_controller.mp4?dl=1 8 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_hd_introducing_safari_view_controller.mp4?dl=1 9 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/5048tyhotl6/504/504_introducing_safari_view_controller.pdf?dl=1 10 | Layout and Animation Techniques for WatchKit: 11 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_sd_layout_and_animation_techniques_for_watchkit.mp4?dl=1 12 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_hd_layout_and_animation_techniques_for_watchkit.mp4?dl=1 13 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/216isrjt4ku9w4/216/216_layout_and_animation_techniques_for_watchkit.pdf?dl=1 14 | Advanced NSOperations: 15 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_sd_advanced_nsoperations.mp4?dl=1 16 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_hd_advanced_nsoperations.mp4?dl=1 17 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2267p2ni281ba/226/226_advanced_nsoperations.pdf?dl=1 18 | Building Document Based Apps: 19 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_sd_building_document_based_apps.mp4?dl=1 20 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_hd_building_document_based_apps.mp4?dl=1 21 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/234reaz1byqc/234/234_building_document_based_apps.pdf?dl=1 22 | Creating Complications with ClockKit: 23 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_sd_creating_complications_with_clockkit.mp4?dl=1 24 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_hd_creating_complications_with_clockkit.mp4?dl=1 25 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/209c9277tttlt9/209/209_creating_complications_with_clockkit.pdf?dl=1 26 | Apple Watch Accessibility: 27 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_sd_apple_watch_accessibility.mp4?dl=1 28 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_hd_apple_watch_accessibility.mp4?dl=1 29 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2048w4vdjhe1i1m/204/204_apple_watch_accessibility.pdf?dl=1 30 | Networking with NSURLSession: 31 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_sd_networking_with_nsurlsession.mp4?dl=1 32 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_hd_networking_with_nsurlsession.mp4?dl=1 33 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_networking_with_nsurlsession.pdf?dl=1 34 | What's New in Web Development in WebKit and Safari: 35 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_sd_whats_new_in_web_development_in_webkit_and_safari.mp4?dl=1 36 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_hd_whats_new_in_web_development_in_webkit_and_safari.mp4?dl=1 37 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/501g8vwlgg2/501/501_whats_new_in_web_development_in_webkit_and_safari.pdf?dl=1 38 | Supporting the Enterprise with OS X Automation: 39 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_sd_supporting_the_enterprise_with_os_x_automation.mp4?dl=1 40 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_hd_supporting_the_enterprise_with_os_x_automation.mp4?dl=1 41 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/306vjwcqnm/306/306_supporting_the_enterprise_with_os_x_automation.pdf?dl=1 42 | What's New in MapKit: 43 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_sd_whats_new_in_mapkit.mp4?dl=1 44 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_hd_whats_new_in_mapkit.mp4?dl=1 45 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/206v5ce46maax7s/206/206_whats_new_in_mapkit.pdf?dl=1 46 | Optimizing Your App for Multitasking on iPad in iOS 9: 47 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_sd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.mp4?dl=1 48 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_hd_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.mp4?dl=1 49 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/212mm5ra3oau66/212/212_optimizing_your_app_for_multitasking_on_ipad_in_ios_9.pdf?dl=1 50 | Introducing GameplayKit: 51 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_sd_introducing_gameplaykit.mp4?dl=1 52 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_hd_introducing_gameplaykit.mp4?dl=1 53 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/608rpwq1ltvg5nmk/608/608_introducing_gameplaykit.pdf?dl=1 54 | What's New in UIKit Dynamics and Visual Effects: 55 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_sd_whats_new_in_uikit_dynamics_and_visual_effects.mp4?dl=1 56 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_hd_whats_new_in_uikit_dynamics_and_visual_effects.mp4?dl=1 57 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/229fksrj39nd/229/229_whats_new_in_uikit_dynamics_and_visual_effects.pdf?dl=1 58 | Designing for Apple Watch: 59 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_sd_designing_for_apple_watch.mp4?dl=1 60 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_hd_designing_for_apple_watch.mp4?dl=1 61 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_designing_for_apple_watch.pdf?dl=1 62 | Cocoa Touch Best Practices: 63 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_sd_cocoa_touch_best_practices.mp4?dl=1 64 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_hd_cocoa_touch_best_practices.mp4?dl=1 65 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2313dt427pmq/231/231_cocoa_touch_best_practices.pdf?dl=1 66 | CloudKit JS and Web Services: 67 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_sd_cloudkit_js_and_web_services.mp4?dl=1 68 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_hd_cloudkit_js_and_web_services.mp4?dl=1 69 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/710jle9eakx/710/710_cloudkit_js_and_web_services.pdf?dl=1 70 | Mysteries of Auto Layout, Part 2: 71 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_sd_mysteries_of_auto_layout_part_2.mp4?dl=1 72 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_hd_mysteries_of_auto_layout_part_2.mp4?dl=1 73 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/219u3bqgvsz2g/219/219_mysteries_of_auto_layout_part_2.pdf?dl=1 74 | Metal Performance Optimization Techniques: 75 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_sd_metal_performance_optimization_techniques.mp4?dl=1 76 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_hd_metal_performance_optimization_techniques.mp4?dl=1 77 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/610kn68riy9ms89m/610/610_metal_performance_optimization_techniques.pdf?dl=1 78 | Privacy and Your App: 79 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_sd_privacy_and_your_app.mp4?dl=1 80 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_hd_privacy_and_your_app.mp4?dl=1 81 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/703kp2dwbwkr/703/703_privacy_and_your_app.pdf?dl=1 82 | Authoring Rich Playgrounds: 83 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_sd_authoring_rich_playgrounds.mp4?dl=1 84 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_hd_authoring_rich_playgrounds.mp4?dl=1 85 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/405t69ymgwkmfzc9/405/405_authoring_rich_playgrounds.pdf?dl=1 86 | What's New in Metal, Part 2: 87 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_sd_whats_new_in_metal_part_2.mp4?dl=1 88 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_hd_whats_new_in_metal_part_2.mp4?dl=1 89 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/607g5z16fpl7pzgi/607/607_whats_new_in_metal_part_2.pdf?dl=1 90 | Your App and Next Generation Networks: 91 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_sd_your_app_and_next_generation_networks.mp4?dl=1 92 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_hd_your_app_and_next_generation_networks.mp4?dl=1 93 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_your_app_and_next_generation_networks.pdf?dl=1 94 | WatchKit In-Depth, Part 1: 95 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_sd_watchkit_indepth_part_1.mp4?dl=1 96 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_hd_watchkit_indepth_part_1.mp4?dl=1 97 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/207id8oiaxrt6lh/207/207_watchkit_indepth_part_1.pdf?dl=1 98 | Swift and Objective-C Interoperability: 99 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_sd_swift_and_objectivec_interoperability.mp4?dl=1 100 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_hd_swift_and_objectivec_interoperability.mp4?dl=1 101 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/401gee20yy5v2men/401/401_swift_and_objectivec_interoperability.pdf?dl=1 102 | Content Protection for HTTP Live Streaming: 103 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_sd_content_protection_for_http_live_streaming.mp4?dl=1 104 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_hd_content_protection_for_http_live_streaming.mp4?dl=1 105 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/502sufwcpog/502/502_content_protection_for_http_live_streaming.pdf?dl=1 106 | Debugging Energy Issues: 107 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_sd_debugging_energy_issues.mp4?dl=1 108 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_hd_debugging_energy_issues.mp4?dl=1 109 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/708xzs0dtwx/708/708_debugging_energy_issues.pdf?dl=1 110 | Managing 3D Assets with Model I/O: 111 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_sd_managing_3d_assets_with_model_io.mp4?dl=1 112 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_hd_managing_3d_assets_with_model_io.mp4?dl=1 113 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/602868pb0ow6idb3w/602/602_managing_3d_assets_with_model_io.pdf?dl=1 114 | Audio Unit Extensions: 115 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_sd_audio_unit_extensions.mp4?dl=1 116 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_hd_audio_unit_extensions.mp4?dl=1 117 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/508691kyzp/508/508_audio_unit_extensions.pdf?dl=1 118 | Monetize and Promote Your App with iAd: 119 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_sd_monetize_and_promote_your_app_with_iad.mp4?dl=1 120 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_hd_monetize_and_promote_your_app_with_iad.mp4?dl=1 121 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/503oad8l55m/503/503_monetize_and_promote_your_app_with_iad.pdf?dl=1 122 | What's New in Core Audio: 123 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_sd_whats_new_in_core_audio.mp4?dl=1 124 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_hd_whats_new_in_core_audio.mp4?dl=1 125 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/507pq8rldk/507/507_whats_new_in_core_audio.pdf?dl=1 126 | Enhancements to SceneKit: 127 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_sd_enhancements_to_scenekit.mp4?dl=1 128 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_hd_enhancements_to_scenekit.mp4?dl=1 129 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/606ui2ppsvalj4nn/606/606_enhancements_to_scenekit.pdf?dl=1 130 | Building Responsive and Efficient Apps with GCD: 131 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_sd_building_responsive_and_efficient_apps_with_gcd.mp4?dl=1 132 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_hd_building_responsive_and_efficient_apps_with_gcd.mp4?dl=1 133 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/718b7aw9tq/718/718_building_responsive_and_efficient_apps_with_gcd.pdf?dl=1 134 | App Extension Best Practices: 135 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_sd_app_extension_best_practices.mp4?dl=1 136 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_hd_app_extension_best_practices.mp4?dl=1 137 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/224o6pqmtb4ik/224/224_app_extension_best_practices.pdf?dl=1 138 | Optimizing Swift Performance: 139 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_sd_optimizing_swift_performance.mp4?dl=1 140 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_hd_optimizing_swift_performance.mp4?dl=1 141 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/4097c25o0qhs6g5/409/409_optimizing_swift_performance.pdf?dl=1 142 | UI Testing in Xcode: 143 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_sd_ui_testing_in_xcode.mp4?dl=1 144 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_hd_ui_testing_in_xcode.mp4?dl=1 145 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/406o0doszwo8r15m/406/406_ui_testing_in_xcode.pdf?dl=1 146 | Deeper into GameplayKit with DemoBots: 147 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_sd_deeper_into_gameplaykit_with_demobots.mp4?dl=1 148 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_hd_deeper_into_gameplaykit_with_demobots.mp4?dl=1 149 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/609pzlyunriyjupp/609/609_deeper_into_gameplaykit_with_demobots.pdf?dl=1 150 | Apple Watch Design Tips and Tricks: 151 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_sd_apple_watch_design_tips_and_tricks.mp4?dl=1 152 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_hd_apple_watch_design_tips_and_tricks.mp4?dl=1 153 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/805yjy11epjkgmnn11/805/805_apple_watch_design_tips_and_tricks.pdf?dl=1 154 | Profiling in Depth: 155 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_sd_profiling_in_depth.mp4?dl=1 156 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_hd_profiling_in_depth.mp4?dl=1 157 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/412rhea5amj6iaf/412/412_profiling_in_depth.pdf?dl=1 158 | Getting Started with Multitasking on iPad in iOS 9: 159 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_sd_getting_started_with_multitasking_on_ipad_in_ios_9.mp4?dl=1 160 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_hd_getting_started_with_multitasking_on_ipad_in_ios_9.mp4?dl=1 161 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2058z3fx76huw93/205/205_getting_started_with_multitasking_on_ipad_in_ios_9.pdf?dl=1 162 | Achieving All-day Battery Life: 163 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_sd_achieving_allday_battery_life.mp4?dl=1 164 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_hd_achieving_allday_battery_life.mp4?dl=1 165 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/707ysegpumy/707/707_achieving_allday_battery_life.pdf?dl=1 166 | App Thinning in Xcode: 167 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_sd_app_thinning_in_xcode.mp4?dl=1 168 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_hd_app_thinning_in_xcode.mp4?dl=1 169 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/404l17yio30l549x/404/404_app_thinning_in_xcode.pdf?dl=1 170 | Apple Design Awards: 171 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/103ot7lzkdri2fvn1iyh/103/103_sd_apple_design_awards.mp4?dl=1 172 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/103ot7lzkdri2fvn1iyh/103/103_hd_apple_design_awards.mp4?dl=1 173 |     PDF: 174 | Designing with Animation: 175 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_sd_designing_with_animation.mp4?dl=1 176 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_hd_designing_with_animation.mp4?dl=1 177 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/803q4kw6eqia7ssp17/803/803_designing_with_animation.pdf?dl=1 178 | Seamless Linking to Your App: 179 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_sd_seamless_linking_to_your_app.mp4?dl=1 180 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_hd_seamless_linking_to_your_app.mp4?dl=1 181 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/5091mxk00t/509/509_seamless_linking_to_your_app.pdf?dl=1 182 | What's New in Core Data: 183 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_sd_whats_new_in_core_data.mp4?dl=1 184 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_hd_whats_new_in_core_data.mp4?dl=1 185 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/220lgx5lvphj2/220/220_whats_new_in_core_data.pdf?dl=1 186 | What's New in Core Image: 187 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_sd_whats_new_in_core_image.mp4?dl=1 188 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_hd_whats_new_in_core_image.mp4?dl=1 189 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/510jiccqsz/510/510_whats_new_in_core_image.pdf?dl=1 190 | What's New in Swift: 191 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_sd_whats_new_in_swift.mp4?dl=1 192 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_hd_whats_new_in_swift.mp4?dl=1 193 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/106z3yjwpfymnauri96m/106/106_whats_new_in_swift.pdf?dl=1 194 | Introducing Search APIs: 195 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_sd_introducing_search_apis.mp4?dl=1 196 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_hd_introducing_search_apis.mp4?dl=1 197 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/709jcaer6su/709/709_introducing_search_apis.pdf?dl=1 198 | Using Safari to Deliver and Debug a Responsive Web Design: 199 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_sd_using_safari_to_deliver_and_debug_a_responsive_web_design.mp4?dl=1 200 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_hd_using_safari_to_deliver_and_debug_a_responsive_web_design.mp4?dl=1 201 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/5059xl75l59/505/505_using_safari_to_deliver_and_debug_a_responsive_web_design.pdf?dl=1 202 | iOS Accessibility: 203 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_sd_ios_accessibility.mp4?dl=1 204 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_hd_ios_accessibility.mp4?dl=1 205 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/201pps6n6g0nsnz/201/201_ios_accessibility.pdf?dl=1 206 | Swift in Practice: 207 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_sd_swift_in_practice.mp4?dl=1 208 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_hd_swift_in_practice.mp4?dl=1 209 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/4119flfsnsgmlfy/411/411_swift_in_practice.pdf?dl=1 210 | New UIKit Support for International User Interfaces: 211 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_sd_new_uikit_support_for_international_user_interfaces.mp4?dl=1 212 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_hd_new_uikit_support_for_international_user_interfaces.mp4?dl=1 213 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/222ngkqh58b52/222/222_new_uikit_support_for_international_user_interfaces.pdf?dl=1 214 | Best Practices for Progress Reporting: 215 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_sd_best_practices_for_progress_reporting.mp4?dl=1 216 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_hd_best_practices_for_progress_reporting.mp4?dl=1 217 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/232f1zopzycv/232/232_best_practices_for_progress_reporting.pdf?dl=1 218 | Adopting New Trackpad Features: 219 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_sd_adopting_new_trackpad_features.mp4?dl=1 220 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_hd_adopting_new_trackpad_features.mp4?dl=1 221 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/217wu453thu1r1/217/217_adopting_new_trackpad_features.pdf?dl=1 222 | Introducing Watch Connectivity: 223 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_sd_introducing_watch_connectivity.mp4?dl=1 224 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_hd_introducing_watch_connectivity.mp4?dl=1 225 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/713gc2tqvvb/713/713_introducing_watch_connectivity.pdf?dl=1 226 | Mysteries of Auto Layout, Part 1: 227 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_sd_mysteries_of_auto_layout_part_1.mp4?dl=1 228 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_hd_mysteries_of_auto_layout_part_1.mp4?dl=1 229 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2187le7kpyhdff/218/218_mysteries_of_auto_layout_part_1.pdf?dl=1 230 | Safari Extensibility: Content Blocking and Shared Links: 231 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_sd_safari_extensibility_content_blocking_and_shared_links.mp4?dl=1 232 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_hd_safari_extensibility_content_blocking_and_shared_links.mp4?dl=1 233 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/511kmynuza/511/511_safari_extensibility_content_blocking_and_shared_links.pdf?dl=1 234 | Low Energy, High Performance: Compression and Accelerate: 235 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_sd_low_energy_high_performance_compression_and_accelerate.mp4?dl=1 236 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_hd_low_energy_high_performance_compression_and_accelerate.mp4?dl=1 237 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/7125ovmdf36/712/712_low_energy_high_performance_compression_and_accelerate.pdf?dl=1 238 | Implementing UI Designs in Interface Builder: 239 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_sd_implementing_ui_designs_in_interface_builder.mp4?dl=1 240 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_hd_implementing_ui_designs_in_interface_builder.mp4?dl=1 241 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/4072909wwb9o9j3/407/407_implementing_ui_designs_in_interface_builder.pdf?dl=1 242 | What's New in NSCollectionView: 243 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_sd_whats_new_in_nscollectionview.mp4?dl=1 244 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_hd_whats_new_in_nscollectionview.mp4?dl=1 245 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/225629tzulwe0/225/225_whats_new_in_nscollectionview.pdf?dl=1 246 | Continuous Integration and Code Coverage in Xcode: 247 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_sd_continuous_integration_and_code_coverage_in_xcode.mp4?dl=1 248 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_hd_continuous_integration_and_code_coverage_in_xcode.mp4?dl=1 249 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/41097fby32x3opk/410/410_continuous_integration_and_code_coverage_in_xcode.pdf?dl=1 250 | Security and Your Apps: 251 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_sd_security_and_your_apps.mp4?dl=1 252 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_hd_security_and_your_apps.mp4?dl=1 253 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/706nu20qkag/706/706_security_and_your_apps.pdf?dl=1 254 | What's New in Cocoa Touch: 255 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_sd_whats_new_in_cocoa_touch.mp4?dl=1 256 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_hd_whats_new_in_cocoa_touch.mp4?dl=1 257 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/1075hpxmc54818sn59su/107/107_whats_new_in_cocoa_touch.pdf?dl=1 258 | Improving the Full Screen Window Experience: 259 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_sd_improving_the_full_screen_window_experience.mp4?dl=1 260 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_hd_improving_the_full_screen_window_experience.mp4?dl=1 261 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/22160ycymy0qg/221/221_improving_the_full_screen_window_experience.pdf?dl=1 262 | WatchKit In-Depth, Part 2: 263 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_sd_watchkit_indepth_part_2.mp4?dl=1 264 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_hd_watchkit_indepth_part_2.mp4?dl=1 265 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/208wc2mdvock1md/208/208_watchkit_indepth_part_2.pdf?dl=1 266 | Apple Pay Within Apps: 267 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_sd_apple_pay_within_apps.mp4?dl=1 268 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_hd_apple_pay_within_apps.mp4?dl=1 269 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/702lp563ezbr/702/702_apple_pay_within_apps.pdf?dl=1 270 | Designing for Future Hardware: 271 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_sd_designing_for_future_hardware.mp4?dl=1 272 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_hd_designing_for_future_hardware.mp4?dl=1 273 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/801auxyvb1pgtkufjk/801/801_designing_for_future_hardware.pdf?dl=1 274 | Getting the Most out of App Analytics: 275 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_sd_getting_the_most_out_of_app_analytics.mp4?dl=1 276 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_hd_getting_the_most_out_of_app_analytics.mp4?dl=1 277 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/303qzm09e7/303/303_getting_the_most_out_of_app_analytics.pdf?dl=1 278 | Building Watch Apps: 279 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_sd_building_watch_apps.mp4?dl=1 280 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_hd_building_watch_apps.mp4?dl=1 281 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/1086gvs7f4vryixs49s6/108/108_building_watch_apps.pdf?dl=1 282 | Building Apps with ResearchKit: 283 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_sd_building_apps_with_researchkit.mp4?dl=1 284 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_hd_building_apps_with_researchkit.mp4?dl=1 285 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/213w6grumlfm0q/213/213_building_apps_with_researchkit.pdf?dl=1 286 | Wallet - The home for Apple Pay and more: 287 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_sd_wallet__the_home_for_apple_pay_and_more.mp4?dl=1 288 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_hd_wallet__the_home_for_apple_pay_and_more.mp4?dl=1 289 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/701i2qis0reg/701/701_wallet__the_home_for_apple_pay_and_more.pdf?dl=1 290 | Introducing the New System Fonts: 291 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_sd_introducing_the_new_system_fonts.mp4?dl=1 292 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_hd_introducing_the_new_system_fonts.mp4?dl=1 293 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/804eub264zh3x4j9yb/804/804_introducing_the_new_system_fonts.pdf?dl=1 294 | What's New in Network Extension and VPN: 295 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_sd_whats_new_in_network_extension_and_vpn.mp4?dl=1 296 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_hd_whats_new_in_network_extension_and_vpn.mp4?dl=1 297 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/717yq4y85w/717/717_whats_new_in_network_extension_and_vpn.pdf?dl=1 298 | Keynote: 299 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/1014o78qhj07pbfxt9g7/101/101_sd_keynote.mp4?dl=1 300 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/1014o78qhj07pbfxt9g7/101/101_hd_keynote.mp4?dl=1 301 |     PDF: 302 | What's New in Core Location: 303 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_sd_whats_new_in_core_location.mp4?dl=1 304 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/714tqy593v/714/714_hd_whats_new_in_core_location.mp4?dl=1 305 |     PDF: 306 | Multitasking Essentials for Media-Based Apps on iPad in iOS 9: 307 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_sd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.mp4?dl=1 308 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_hd_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.mp4?dl=1 309 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/211dseo3cn0bnw/211/211_multitasking_essentials_for_mediabased_apps_on_ipad_in_ios_9.pdf?dl=1 310 | Editing Movies in AV Foundation: 311 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_sd_editing_movies_in_av_foundation.mp4?dl=1 312 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_hd_editing_movies_in_av_foundation.mp4?dl=1 313 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/5062qehwhs/506/506_editing_movies_in_av_foundation.pdf?dl=1 314 | Protocol-Oriented Programming in Swift: 315 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_sd_protocoloriented_programming_in_swift.mp4?dl=1 316 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_hd_protocoloriented_programming_in_swift.mp4?dl=1 317 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/408509vyudbqvts/408/408_protocoloriented_programming_in_swift.pdf?dl=1 318 | Performance on iOS and watchOS: 319 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_sd_performance_on_ios_and_watchos.mp4?dl=1 320 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_hd_performance_on_ios_and_watchos.mp4?dl=1 321 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/230wt8hs0wt8/230/230_performance_on_ios_and_watchos.pdf?dl=1 322 | Platforms State of the Union: 323 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_sd_platforms_state_of_the_union.mp4?dl=1 324 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_hd_platforms_state_of_the_union.mp4?dl=1 325 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/1026npwuy2crj2xyuq11/102/102_platforms_state_of_the_union.pdf?dl=1 326 | What's New in CloudKit: 327 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_sd_whats_new_in_cloudkit.mp4?dl=1 328 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_hd_whats_new_in_cloudkit.mp4?dl=1 329 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/704ci202euy/704/704_whats_new_in_cloudkit.pdf?dl=1 330 | Introducing On Demand Resources: 331 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_sd_introducing_on_demand_resources.mp4?dl=1 332 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_hd_introducing_on_demand_resources.mp4?dl=1 333 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/214dh5q5d0kswh/214/214_introducing_on_demand_resources.pdf?dl=1 334 | What's New in Core Motion: 335 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_sd_whats_new_in_core_motion.mp4?dl=1 336 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_hd_whats_new_in_core_motion.mp4?dl=1 337 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/705qrxhfxo0/705/705_whats_new_in_core_motion.pdf?dl=1 338 | What's New in Storyboards: 339 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_sd_whats_new_in_storyboards.mp4?dl=1 340 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_hd_whats_new_in_storyboards.mp4?dl=1 341 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/215972d0hjjcfx/215/215_whats_new_in_storyboards.pdf?dl=1 342 | What's New in iTunes Connect: 343 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_sd_whats_new_in_itunes_connect.mp4?dl=1 344 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_hd_whats_new_in_itunes_connect.mp4?dl=1 345 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/302sxabxp0/302/302_whats_new_in_itunes_connect.pdf?dl=1 346 | What's New in Xcode: 347 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_sd_whats_new_in_xcode.mp4?dl=1 348 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_hd_whats_new_in_xcode.mp4?dl=1 349 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/104usewvb5m0qbwafx8p/104/104_whats_new_in_xcode.pdf?dl=1 350 | What's New in Internationalization: 351 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_sd_whats_new_in_internationalization.mp4?dl=1 352 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_hd_whats_new_in_internationalization.mp4?dl=1 353 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/227s0ti458qgg/227/227_whats_new_in_internationalization.pdf?dl=1 354 | WatchKit Tips and Tricks: 355 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_sd_watchkit_tips_and_tricks.mp4?dl=1 356 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_hd_watchkit_tips_and_tricks.mp4?dl=1 357 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/228eahxjbaops/228/228_watchkit_tips_and_tricks.pdf?dl=1 358 | Going Social with ReplayKit and Game Center: 359 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_sd_going_social_with_replaykit_and_game_center.mp4?dl=1 360 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_hd_going_social_with_replaykit_and_game_center.mp4?dl=1 361 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/6053hq2fz0ebo0lm/605/605_going_social_with_replaykit_and_game_center.pdf?dl=1 362 | What's New in Managing Apple Devices: 363 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_sd_whats_new_in_managing_apple_devices.mp4?dl=1 364 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_hd_whats_new_in_managing_apple_devices.mp4?dl=1 365 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/301tcfp66f/301/301_whats_new_in_managing_apple_devices.pdf?dl=1 366 | Advanced Touch Input on iOS: 367 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_sd_advanced_touch_input_on_ios.mp4?dl=1 368 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_hd_advanced_touch_input_on_ios.mp4?dl=1 369 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/233l9q8hj9mw/233/233_advanced_touch_input_on_ios.pdf?dl=1 370 | Building Better Apps with Value Types in Swift: 371 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_sd_building_better_apps_with_value_types_in_swift.mp4?dl=1 372 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_hd_building_better_apps_with_value_types_in_swift.mp4?dl=1 373 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/414sklk5h2k3ki3/414/414_building_better_apps_with_value_types_in_swift.pdf?dl=1 374 | Improving Your Existing Apps with Swift: 375 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_sd_improving_your_existing_apps_with_swift.mp4?dl=1 376 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_hd_improving_your_existing_apps_with_swift.mp4?dl=1 377 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/403l7ohdidhmnkgx/403/403_improving_your_existing_apps_with_swift.pdf?dl=1 378 | CloudKit Tips and Tricks: 379 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_sd_cloudkit_tips_and_tricks.mp4?dl=1 380 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_hd_cloudkit_tips_and_tricks.mp4?dl=1 381 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/7153rwmu2r/715/715_cloudkit_tips_and_tricks.pdf?dl=1 382 | iTunes Connect: Development to Distribution: 383 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_sd_itunes_connect_development_to_distribution.mp4?dl=1 384 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_hd_itunes_connect_development_to_distribution.mp4?dl=1 385 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/304ywrr62d/304/304_itunes_connect_development_to_distribution.pdf?dl=1 386 | What's New in Metal, Part 1: 387 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_sd_whats_new_in_metal_part_1.mp4?dl=1 388 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_hd_whats_new_in_metal_part_1.mp4?dl=1 389 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/6037pi9rxl6tfss8w/603/603_whats_new_in_metal_part_1.pdf?dl=1 390 | What's New in HealthKit: 391 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_sd_whats_new_in_healthkit.mp4?dl=1 392 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_hd_whats_new_in_healthkit.mp4?dl=1 393 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/203bxvbtrom9t1t/203/203_whats_new_in_healthkit.pdf?dl=1 394 | Introducing WatchKit for watchOS 2: 395 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_sd_introducing_watchkit_for_watchos_2.mp4?dl=1 396 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_hd_introducing_watchkit_for_watchos_2.mp4?dl=1 397 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/105ncyldc6ofunvsgtan/105/105_introducing_watchkit_for_watchos_2.pdf?dl=1 398 | What's New in HomeKit: 399 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_sd_whats_new_in_homekit.mp4?dl=1 400 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_hd_whats_new_in_homekit.mp4?dl=1 401 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/210oyq5peqlavb/210/210_whats_new_in_homekit.pdf?dl=1 402 | What's New in Notifications: 403 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_sd_whats_new_in_notifications.mp4?dl=1 404 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_hd_whats_new_in_notifications.mp4?dl=1 405 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/720xwbi9nl/720/720_whats_new_in_notifications.pdf?dl=1 406 | What's New in Cocoa: 407 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_sd_whats_new_in_cocoa.mp4?dl=1 408 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_hd_whats_new_in_cocoa.mp4?dl=1 409 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/2023wpov1sxpnf9/202/202_whats_new_in_cocoa.pdf?dl=1 410 | What's New in SpriteKit: 411 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_sd_whats_new_in_spritekit.mp4?dl=1 412 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_hd_whats_new_in_spritekit.mp4?dl=1 413 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/604gq12qghmv39znb/604/604_whats_new_in_spritekit.pdf?dl=1 414 | Introducing the Contacts Framework for iOS and OS X: 415 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_sd_introducing_the_contacts_framework_for_ios_and_os_x.mp4?dl=1 416 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_hd_introducing_the_contacts_framework_for_ios_and_os_x.mp4?dl=1 417 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/223rmo6dv9hxh/223/223_introducing_the_contacts_framework_for_ios_and_os_x.pdf?dl=1 418 | What's New in LLDB: 419 |     SD:http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_sd_whats_new_in_lldb.mp4?dl=1 420 |     HD:http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_hd_whats_new_in_lldb.mp4?dl=1 421 |     PDF:http://devstreaming.apple.com/videos/wwdc/2015/402c0mhxbs8tt52t/402/402_whats_new_in_lldb.pdf?dl=1 -------------------------------------------------------------------------------- /wwdc2015.rb: -------------------------------------------------------------------------------- 1 | require 'open-uri' 2 | require 'nokogiri' 3 | require 'thread' 4 | 5 | base_url = 'https://developer.apple.com/videos/wwdc/2015/' 6 | url_links = {} 7 | 8 | doc = Nokogiri::HTML(open(base_url)) 9 | links = doc.css('section.video_sections li a') 10 | links.each do |link| 11 | title = link.text 12 | url_str = URI.join(base_url, link.attributes['href'].value).to_s 13 | url_links[title] = url_str 14 | end 15 | 16 | semaphore = Mutex.new 17 | threads = [] 18 | 19 | sd_links = {} 20 | hd_links = {} 21 | pdf_links = {} 22 | 23 | url_links.each_pair do |title, link| 24 | threads << Thread.new { 25 | doc = Nokogiri::HTML(open(link)) 26 | sd_link = doc.xpath("//a[text()='SD']").last.attributes['href'].value 27 | hd_link = doc.xpath("//a[text()='HD']").last.attributes['href'].value 28 | 29 | pdf_link = doc.xpath("//a[text()='PDF']").last.attributes['href'].value if doc.xpath("//a[text()='PDF']").last 30 | 31 | semaphore.synchronize { 32 | puts "#{title}: \n\tSD:#{sd_link}\n\tHD:#{hd_link}\n\tPDF:#{pdf_link}\n" 33 | sd_links[title] = sd_link 34 | hd_links[title] = hd_link 35 | pdf_links[title] = pdf_link 36 | } 37 | } 38 | 39 | end 40 | 41 | threads.map { |trd| trd.join } 42 | 43 | File.open('wwdc2015-sd.txt', 'w+') { |f| f.write(sd_links.values.join("\n")) } 44 | File.open('wwdc2015-hd.txt', 'w+') { |f| f.write(hd_links.values.join("\n")) } 45 | File.open('wwdc2015-pdf.txt', 'w+') { |f| f.write(pdf_links.values.join("\n")) } -------------------------------------------------------------------------------- /中文字幕/字幕工具说明.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yagamis/WWDC_2015_Video_Subtitle/17fb6cc0590880eb54b639d07c0806d75e67e66f/中文字幕/字幕工具说明.txt --------------------------------------------------------------------------------