Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたのアプリ、✨リブランディング✨できますか? / iosdc2020
Search
monoqlo
September 20, 2020
Technology
1.7k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
あなたのアプリ、✨リブランディング✨できますか? / iosdc2020
iOSDC 2020 2020/09/20 LT
monoqlo
September 20, 2020
More Decks by monoqlo
See All by monoqlo
入門 SwiftUI Alignment Guide / iOSDC2022
monoqlo
11
6.3k
Hey Siri!マルチプラットフォームでのSiriショートカットの地雷を教えて / iOSDC2021
monoqlo
0
880
実践 CallKit/PushKit ときどき🐛退治 / iOSDC 2019
monoqlo
4
4.1k
「QRコード読み取り?楽勝ですよ😙」=>「AVFoundationを信じたおれがバカだった😇」 / iOSDC 2018
monoqlo
10
31k
WWDC2016のススメ
monoqlo
0
140
Other Decks in Technology
See All in Technology
失敗を資産に変えるClaude Code
shinyasaita
0
710
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
120
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
150
200個のGitHubリポジトリを横断調査したかった
icck
0
130
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
180
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
0
110
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
0
170
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
320
MCP Appsを作ってみよう
iwamot
PRO
4
690
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
220
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.3k
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.3k
Featured
See All Featured
Believing is Seeing
oripsolob
1
150
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
Odyssey Design
rkendrick25
PRO
2
700
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
860
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Docker and Python
trallard
47
3.9k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Un-Boring Meetings
codingconduct
0
320
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Into the Great Unknown - MozCon
thekraken
41
2.6k
Transcript
@monoqloʢͷ͘Ζʣ ͋ͳͨͷΞϓϦɺ ✨ϦϒϥϯσΟϯά✨Ͱ͖·͔͢ʁ iOSDC TOKYO 2020
None
20209݄1
20209݄1
None
None
ৼΓฦͬͯΈΔͱ…
201911݄27 10ϲ݄લ
None
201812݄5 ͞Βʹ1લ
λΫϕϧϦϦʔε͔Β8ϲ݄ޙ
ຖϦχϡʔΞϧ ͯ͠ΔΜ͚
དྷϦχϡʔΞϧ ͋ΔͷͰ…
ϦϒϥϯσΟϯά ʹޮ͘ॲํᝦબ⚕
ॳ
ϦϒϥϯσΟϯάͰ৭Λ શ෦ม͑Δͷ͕ͭΒͯ͘… ৭Λࢦఆ͍ͯ͠Δ Storyboard150΄Ͳ… ॳ
⚕ʮαϙʔτOSόʔδϣϯ͍ͭ͘Ͱ͔͢ʯ ʮ࣮iOS 10Ҏ߱Ͱͯ͠…ʯ ⚕ʮॏͰ͢ɻ͍·͙͢আ͠·͠ΐ͏ɻʯ
StoryboardΛ͏ͳΒαϙʔτ͢ΔͷiOS 11Ҏ߱ʹ Asset CatalogͰ৭ཧΛ ॲํᝦ
None
None
Asset Catalog্ͷ৭Λมߋ͢Δͱ Ϗϧυ͞ΕͨΞϓϦStoryboard্ͷ৭ΓସΘΔ
ͪͳΈʹ…
ͪͳΈʹ…
ͪͳΈʹ…
ͪͳΈʹ…
ͪͳΈʹ…
ͪͳΈʹ…
ؾʹͳΔਓ͋ͱͰ εϥΠυݟ͍ͯͩ͘͞
ྍ#2
ը૾ͷࠩ͠ସ͕͑ඞཁͳΜͰ͕͢ɺ Կࠩ͠ସ͕͑ൃੜ͍ͯͯ͠… ྍ#2
⚕ʮͪͳΈʹը૾໊ͬͯͪΌΜͱཧͰ͖ͯ·͔͢ʁʯ ʮσβΠφʔ͕ͭͬͯ͘͘Εͨը૾ʹɺͪ͜ΒͰదʹ ໊લ͚ͭͯొ͢Δ͜ͱ͋Γ·͢Ͷʯ ⚕ʮΊͪΌͪ͘ΌඇޮͳͷͰΊ͍ͯͩ͘͞ʯ
ॲํᝦ ໋໊نଇࡦఆ ex. ΞΠίϯͳΒ ic_xxx_yyy , ΠϥετͳΒ illust_xxx_yyy ͱ͔ Zeplin͔ΒͷҰׅΤΫεϙʔτͰߋ৽
టष͘৽چը૾໊ରԠද.csvͭͬͯ͘ɺεΫϦϓτॻ͍ͯஔ͖͑ͨΓ͚ͨ͠Ͳɺ͕࣌ؒͳ͍ͷͰͦͷলུ
None
None
None
ͨͩ͠…
ଥڠͱඞཁ
લఏ ը૾αΠζม͑ͳ͍ ϨΠΞτʹӨڹ͕͋Δͷݸผʹࠩ͠ସ͑
1ͭͷ໊લʹରͯ͠1ͭͷը૾͔͠ొͰ͖ͳ͍
1ͭͷ໊લʹରͯ͠1ͭͷը૾͔͠ొͰ͖ͳ͍
1ͭͷ໊લʹରͯ͠1ͭͷը૾͔͠ొͰ͖ͳ͍ ͑ͳ͍
• Appearance μʔΫϞʔυରԠͰ͖ͳ͍… • Slicing Contents.jsonͷimages͕·Δ͝ͱஔ͖ΘΔͷͰϦηο τ͞ΕΔ ಛʹͭΒ͍ͷ
"images" : [ { - "idiom" : "universal", - "filename"
: "company_noimage_outlined.pdf" + "filename" : "company_noimage_outlined.pdf", + "idiom" : "universal" } "images" : [ { - "filename" : "radio_unselected.pdf", - "idiom" : "universal" + "idiom" : "universal", + "filename" : "radio_unselected.pdf" } ΤΫεϙʔτͰ༨ܭͳdiff͕ൃੜ
େͷը૾ࠩ͠ସ͕͑ඞཁʹͳͬͯ… ݕࡧͰ͖Δ͠ը૾Λݟ͚ͭΔͷ͕؆୯ ·Δ͝ͱஔ͖͑Δ͚ͩͰྑ͍ ը૾Λݟ͚ͭΔͷཧେมʢiOSͱAndroidͰ ἧ͍ͬͯͳ͍͠…ʣ ͻͱͭͻͱͭஔ͖͑Δͷखؒ
ྍ#3
࣮࣌ʹ ϑΥϯταΠζΛ ؒҧ͕͑ͪͰ… ྍ#3
⚕ʮσβΠϯࢦఆͬͱڽࢹ͍ͯͩ͘͠͞ʯ ʮͭΒ͍ɻԿݸݟͯΔͱήγϡλϧτ่յ͠·͢…ʯ ⚕ʮΘ͔Δʯ ʮ> Θɹ͔ɹΔ <ʯ ⚕ʮͰ֤αΠζʹ໊લΛ͚ͭͯΈ͍͔͕ͯͰ͠ΐ͏ʯ
ॲํᝦ ֤ϑΥϯταΠζ͝ͱʹɺ૬ରతʹαΠζײͷΘ͔Δ໋໊
title, subTitle, headline, body,… ͏ʔΜ… ࠔΓͦ͏ͳέʔε • ʮ͜͜… subTItle… ͳͷ͔ʁʯ
• ʮ৽͍͠ཁૉΛͲΜͲΜ͍͖ͯͦ͠͏…ʯ
title, subTitle, headline, body,… ͏ʔΜ… ࠔΓͦ͏ͳέʔε • ʮ͜͜… subTItle… ͳͷ͔ʁʯ
• ʮ৽͍͠ཁૉΛͲΜͲΜ͍͖ͯͦ͠͏…ʯ
None
None
ੜ໊͖Λ࠾༻ • ϝδϟʔͳੜ͖ͷେ͖͞ɺ૬ରతʹΠϝʔδ͍͢͠ < • ෯Λ͓͚࣋ͨͤͯɺதؒʹ૿ͨ͘͠ͳͬͯରԠͰ͖Δ • ֆจࣈͰදݱͰ͖Δੜ͖ͳΒࢹೝੑྑ͍ mouse rabbit
dog monkey sheep bear elephant
None
None
None
public enum TextStyle { case mouse(FontWeight = .regular) // 12
case rabbit(FontWeight = .regular) // 13 case dog(FontWeight = .regular) // 14 case monkey(FontWeight = .regular) // 17 case sheep(FontWeight = .regular) // 19 case bear(FontWeight = .regular) // 23 case elephant(FontWeight = .regular) // 33 internal var font: UIFont { // ֤caseͷϑΥϯτΛฦ͢ return .systemFont(ofSize: size, weight: weight) } } ίʔυ্ͷϑΥϯτఆٛʢεϥΠυ༻ʹ؆ུԽͯ͠·͢ʣ public enum FontWeight { case regular case heavy fileprivate var value: UIFont.Weight { switch self { case .regular: return .regular case .heavy: return .heavy } } }
⚕ 3ͭհͨ͠ΜͰ͕͢…
ۓٸ֎དྷ One more thing…
Ծը૾ͷ··ϦϦʔε ͦ͠͏ʹͳͬͯ͠·ͬͯ… ۓٸ ֎དྷ
⚕ʮීஈͷ༷ࢠΛڭ͑ͯΒ͑·͔͢ʯ ʮΞϓϦͷผͷը૾ΛͱΓ͋͑ͣηοτ͓͍ͯͨ͠ ΓɺσβΠϯ্ͷԾը૾͕͋ΕͦΕΛೖΕͨΓ…ʯ ⚕ʮΕͯແཧͳ͍Ͱ͢ͶɻίϯύΠϥͷྗΛआΓ· ͠ΐ͏ʯ
ॲํᝦ σόοάϏϧυͰͷΈఆٛ͞ΕΔUIImageͷextension
#if DEBUG extension UIImage { @available(iOS, deprecated, message: "temporary() is
temporary image. it needs to be fixed") func temporary() -> UIImage { return self } } #endif UIImage+Temporary
Debug Release
ࣗݾհ
@monoqloʢͷ͘Ζʣ • Mobility Technologies Ͱಇ͍ͯΔਓ • 1ϲ݄લ͔ΒFF14ΛΏΔ;ΘϓϨΠத @ElementalDC/Atomos Ξόλʔ͕͔Θ͍ͯ͘ϩάΠϯ͢Δͨͼ ʹQoL্͕Δ☺
@monoqloʢͷ͘Ζʣ • Mobility Technologies Ͱಇ͍ͯΔਓ • 1ϲ݄લ͔ΒFF14ΛΏΔ;ΘϓϨΠத @ElementalDC/Atomos Ξόλʔ͕͔Θ͍ͯ͘ϩάΠϯ͢Δͨͼ ʹQoL্͕Δ☺
APPENDIX
iOS 10ҎԼΛ αϙʔτͯ͠ΔΞϓϦ ௐͯΈ·ͨ͠
32/100 ແྉAppϥϯΩϯάϕετ100 2020/09/19࣌
None
ը૾ҰׅΤΫεϙʔτ࣮ݱʹ͚ͨటष͍ࣄલ४උ JNBHF@OBNFTDTW JDPO@DBODFM@UBYJ JD@DBODFMUBYJ@NBJODPMPS JDPO@DBTI JD@DBTI@NBJODPMPS JDPO@DIFDL@TFMFDUFE JD@DIFDL@DJSDMF@pMM@NBJODPMPS JDPO@DIFDL JD@DIFDL@DJSDMF@PVUMJOFE@EJTBCMF
DBSECSBOE@VOLOPXO@9- JD@DSFEJUDBSE@pMM@YM@HSBZ DPVQPO JMMVTU@DPVQPO@CBOOFS ৽چը૾໊ରԠද.csvΛ࡞ ஔεΫϦϓτΛͭͬͯࠩ͘͠ସ͑
require "csv" if ARGV.count != 2 then puts "Ҿͷ͕ਖ਼͋͘͠Γ·ͤΜɻ" puts
"ୈ1Ҿʹ ஔ͍ͨ͠ը૾໊ҰཡcsvϑΝΠϧ ͷpathΛɺୈ2Ҿʹ Storyboard/xib ؚ͕·ΕΔσΟϨΫτϦͷpathΛ༩͍͑ͯͩ͘͞ɻ" exit end image_names_path = ARGV[0] if File.extname(image_names_path) != ".csv" then puts "ୈ1Ҿʹࢦఆ͞ΕͨϑΝΠϧcsvϑΝΠϧͰ͋Γ·ͤΜɻਖ਼͍͠ϑΝΠϧΛࢦఆ͍ͯͩ͘͠͞ɻ" exit end root_path = ARGV[1] image_names = CSV.read(image_names_path) image_names.each { |names| old_name = names[0] new_name = names[1] next if new_name.nil? || old_name.nil? puts "#{old_name} => #{new_name}" [ ["<image name=\"#{old_name}\"", "<image name=\"#{new_name}\""], ["value=\"#{old_name}\"", "value=\"#{new_name}\""], ["image=\"#{old_name}\"", "image=\"#{new_name}\""], ["R.image.#{old_name}()", "R.image.#{new_name}()"] ].each { |texts| command = "grep -lr '#{texts.first}' #{root_path} | xargs sed -i '' -e 's/#{texts.first}/#{texts.last}/g'" system(command) } } puts "Completed!" ը૾໊ ৽چ ஔεΫϦϓτ.rb
ϏοτϚοϓͱϕΫλʔScreenΛ͚Δ
None
PNGʹPDFʹ͍ͨ͠ը૾ؚ· Εͯ͠·͏ͷͰɺ ͍ࠞͬͯ͟ΔͱPNG͚ͩͷҰׅ ΤΫεϙʔτ͕Ͱ͖ͳ͍
࠷ޙʹେͳ͜ͱ
σβΠφʔͱڠྗ͠Α͏
• ܰඍͳ৭/ը૾मਖ਼ͳΒσβΠφʔࣗΒ֬ೝͰ͖Δମ੍Λͭ͘Δ • ৭ͬͯඍௐ͕ͪ͠ • ΤϯδχΞ͕Ϗϧυͯͨ͠͠Γݟͤʹ͍͔ͳͯ͘ྑ ͍ͷͰߴޮ • GitHubͷwikiʹඇΤϯδχΞ͚ϏϧυϚχϡΞϧඋ •
λʔϛφϧॳ༻Ͱɺgitͷ͕ࣝͳͯ͘ɺϏϧυͰ͖Δ ֬ೝαΠΫϧΛૣ͘ճ͢͜ͱॏཁ