如何解决NavDestination切换页面后浏览位置无法保存问题
问题现象
在HarmonyOS中,使用NavDestination实现页面跳转至其他页面后,下次进入如何保持跳转前页面的浏览位置?
背景知识
Navigation:Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(NavDestination的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@ohos.arkui.observer(无感监听)提供UI组件行为变化的无感监听能力。可以监听Navigation的页面切换事件进行相应操作。
Scroll是一种可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。
onDidScroll方法在Scroll滚动时触发,可用于在滑动过程中获取Scroll组件的偏移量yOffset。
scrollTo方法可用于让Scroll组件滑动到指定位置。
AppStorage是应用全局的UI状态存储,和应用的进程绑定,只能在UI主线程中使用,无法在子线程中使用、修改。
解决方案
方案一:使用路由模式保留页面实例。
在页面跳转时不要使用pop和clear等方法,否则NavDestination页面会被回收。可以采用单例模式MOVE_TO_TOP_SINGLETON跳转至指定的页面,该方式会使用栈内已存在的页面实例(即浏览位置不变)。
由于单例模式是从栈底到栈顶依次查找,当栈内存在多个同名页面实例时,会默认跳转最底层的同名页面实例,所以需确保栈内只存在一个同名实例,否则跳转的页面保留的滚动位置与上一次显示的页面会不一致(显示的是栈底同名实例保留的滚动位置)。
https://pastebin.com/Kvfw56Ui
https://pastebin.com/6Jk0iJHg
https://pastebin.com/aHSWm99J
https://pastebin.com/FgCAfbE3
https://pastebin.com/TdJAtZuS
https://pastebin.com/t5prk0xM
https://pastebin.com/9KBv8p6Z
https://pastebin.com/QzHRmSST
https://pastebin.com/EYerCiYE
https://pastebin.com/KQYtdiVR
https://pastebin.com/qPDGQpr7
https://pastebin.com/Ur2cbXAg
https://pastebin.com/niVM6VLk
https://pastebin.com/XpBnqUwS
https://pastebin.com/ndDMLQMC
https://pastebin.com/Fe0WC3pa
https://pastebin.com/RrnvPE1w
https://pastebin.com/bD5WPwRg
https://pastebin.com/YDh64vkT
https://pastebin.com/4LWHr9jc
https://pastebin.com/DCtRCCCk
https://pastebin.com/3p2Jzncu
https://pastebin.com/T3SJ62ar
https://pastebin.com/GKfL979H
https://pastebin.com/XMYGtPje
https://pastebin.com/rzXKvcuv
https://pastebin.com/JvR7cH5d
https://pastebin.com/3FDVEcuX
https://pastebin.com/h6cUiaBF
https://pastebin.com/ME4peSzL
https://pastebin.com/N5qAacXz
https://pastebin.com/JZZwHd6Z
https://pastebin.com/fGN6CmDR
https://pastebin.com/K3EVxehv
https://pastebin.com/PqCXWDDh
https://pastebin.com/fqusPVdu
https://pastebin.com/Dvt50mhL
https://pastebin.com/CtGAWTga
https://pastebin.com/XyuX26ci
https://pastebin.com/d9K2WJJt
https://pastebin.com/GwHXXvtC
https://pastebin.com/DDCwB3nj
https://pastebin.com/w0SKXPMz
https://pastebin.com/pN4H6zQh
https://pastebin.com/2MEDMTDa
https://pastebin.com/Km8YREQ6
https://pastebin.com/JCDkV4YW
https://pastebin.com/DVzuaCcx
https://pastebin.com/uc5iwWuj
https://pastebin.com/gNCWP8Qc
https://pastebin.com/Yu8Egw5s
https://pastebin.com/0LyQQjKP
https://pastebin.com/w5KFZYZd
https://pastebin.com/675wTRDu
https://pastebin.com/q3HydkUg
https://pastebin.com/zw5u9Qdi
https://pastebin.com/mzFWd75m
https://pastebin.com/xa0XPcNr
https://pastebin.com/YTTmLc1J
https://pastebin.com/81JwSJWW
https://pastebin.com/JZ5Yd8mP
https://pastebin.com/HYPHRp3p
https://pastebin.com/i7UKj8g6
https://pastebin.com/eS8TWDJF
https://pastebin.com/s17FvZ9R
https://pastebin.com/YG3qffNc
https://pastebin.com/Jm6jQ9Hr
https://pastebin.com/RyYPmYMa
https://pastebin.com/rtcK0Z53
https://pastebin.com/GX1W9zHA
https://pastebin.com/MydzWJwB
https://pastebin.com/sfxsFT66
https://pastebin.com/aayDqQsH
https://pastebin.com/GHia1M2L
https://pastebin.com/tHvSWiGS
https://pastebin.com/cJmt5rpy
https://pastebin.com/JYDkdGLs
https://pastebin.com/stRVBXTH
https://pastebin.com/G8gY33rM
https://pastebin.com/yWTE4s8z
https://pastebin.com/bF237U4E
https://pastebin.com/A2XjbJFL
https://pastebin.com/CMPsmXHW
https://pastebin.com/XBnbf5yR
https://pastebin.com/2WTSxuZH
https://pastebin.com/x9TYHnnR
https://pastebin.com/yr442rZ9
https://pastebin.com/kTQXdYBq
https://pastebin.com/sXG2mktr
https://pastebin.com/sHKZkR2S
https://pastebin.com/VgaMNyjP
https://pastebin.com/saBuBbfx
https://pastebin.com/Akn339vN
https://pastebin.com/LxJpgWdH
https://pastebin.com/gCUJtG1r
https://pastebin.com/bNS4mhKg
https://pastebin.com/PKcfHFsC
https://pastebin.com/3cMHb88V
https://pastebin.com/3HyqCceQ
https://pastebin.com/NpPEKWNc
https://pastebin.com/Mxr4rfx3
https://pastebin.com/1ND8zgqs
https://pastebin.com/Bk8zT2RD
https://pastebin.com/PivBT23m
https://pastebin.com/PhBTFTus
https://pastebin.com/iRW432jR
https://pastebin.com/W4Euyfpd
https://pastebin.com/E9JLP4M1
https://pastebin.com/2G53rfER
https://pastebin.com/GCiDaiZh
https://pastebin.com/jd9TTX9d
https://pastebin.com/Ah3LCi7e
https://pastebin.com/mNF9WeS7
https://pastebin.com/aKzY3GUc
https://pastebin.com/n7cevaYk
https://pastebin.com/GDDDzUuy
https://pastebin.com/tyx4arNi
https://pastebin.com/j54FMwvB
https://pastebin.com/2cRztMQY
https://pastebin.com/G6WWzmMF
https://pastebin.com/eVszwUfs
https://pastebin.com/D4rYGpE6
https://pastebin.com/6Jya9VEL
https://pastebin.com/vyFWsBCr
https://pastebin.com/pv7BP9vr
https://pastebin.com/RhR9FeUP
https://pastebin.com/vWxFY2YW
https://pastebin.com/Lairj5Ld
https://pastebin.com/jwQKSavR
https://pastebin.com/8GvaRTz1
https://pastebin.com/3YHX2qmE
https://pastebin.com/kssYcnr7
https://pastebin.com/NtnKhtYY
https://pastebin.com/Fz6cc5Le
https://pastebin.com/icc6WRsj
https://pastebin.com/wWk9nFRp
https://pastebin.com/eXQgBJMX
https://pastebin.com/z0xrXUZ3
https://pastebin.com/spSBiP8J
https://pastebin.com/AaUJmpHM
https://pastebin.com/3x1w4uHd
https://pastebin.com/pKZvNg7m
https://pastebin.com/Qb6vxDTQ
https://pastebin.com/P0S6wfBk
https://pastebin.com/444CJvwY
https://pastebin.com/7MkiVbks
https://pastebin.com/45wrx7jX
https://pastebin.com/J6M4Hh9S
https://pastebin.com/T5gQ6kJV
https://pastebin.com/h4K76YnL
https://pastebin.com/Kmx8rkB5
https://pastebin.com/42F7A6X9
https://pastebin.com/qnTdJLyj
https://pastebin.com/LTBywbqr
https://pastebin.com/2sQhNdXp
https://pastebin.com/mhSnZhNt
https://pastebin.com/wEfqig2G
https://pastebin.com/HbyYyFs0
https://pastebin.com/vUXzYbcc
https://pastebin.com/nDJnT1yM
https://pastebin.com/DKM75CX4
https://pastebin.com/hB0980pZ
https://pastebin.com/Nk6s4uGj
https://pastebin.com/PJf3D7tg
https://pastebin.com/5Sr8y30c
https://pastebin.com/huf9nsJ4
https://pastebin.com/xtBzF05M
https://pastebin.com/JFmF4u1f
https://pastebin.com/4zmGeM48
https://pastebin.com/UB9TNyxW
https://pastebin.com/cXSRyukE
https://pastebin.com/XdhcwfBp
https://pastebin.com/UYMVPFgN
https://pastebin.com/c62H8NxQ
https://pastebin.com/84DXZjfQ
https://pastebin.com/fFepWW4H
https://pastebin.com/3Sq1TF6k
https://pastebin.com/SQPTntKg
https://pastebin.com/khc1nD0w
https://pastebin.com/p8beJJva
https://pastebin.com/9LfnVJAJ
https://pastebin.com/M6QchRZ9
https://pastebin.com/Egxy8RxR
https://pastebin.com/D9v72rK6
https://pastebin.com/82dq2ZHB
https://pastebin.com/WtWcMEAa
https://pastebin.com/FhzkMMw1
https://pastebin.com/s5kf22wS
https://pastebin.com/kxXm99HH
https://pastebin.com/ZeUdrbC7
https://pastebin.com/Uyd0wkV5
https://pastebin.com/Gj32PSKS
https://pastebin.com/QWZZkFKR
https://pastebin.com/Hd2BgPS5
https://pastebin.com/hdiUJFS0
https://pastebin.com/u2Gt9cfq
https://pastebin.com/0vHYKc8F
https://pastebin.com/TZVHGvLR
https://pastebin.com/VFxecajq
https://pastebin.com/nWj4HsBJ
https://pastebin.com/G8GUM8fz
https://pastebin.com/LReXd1m0
https://pastebin.com/fpQnrYTL
https://pastebin.com/RyDHm8nK
https://pastebin.com/4gAzEceK
https://pastebin.com/AgGD7Sw8
https://pastebin.com/Zh7srRfN
https://pastebin.com/2y9BHBvR
https://pastebin.com/cZ9yHWab
https://pastebin.com/NRHZcAUe
https://pastebin.com/qfC6uqGY
https://pastebin.com/pzbatnT2
https://pastebin.com/pytQrM3n
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
问题现象
在HarmonyOS中,使用NavDestination实现页面跳转至其他页面后,下次进入如何保持跳转前页面的浏览位置?
背景知识
Navigation:Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(NavDestination的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@ohos.arkui.observer(无感监听)提供UI组件行为变化的无感监听能力。可以监听Navigation的页面切换事件进行相应操作。
Scroll是一种可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。
onDidScroll方法在Scroll滚动时触发,可用于在滑动过程中获取Scroll组件的偏移量yOffset。
scrollTo方法可用于让Scroll组件滑动到指定位置。
AppStorage是应用全局的UI状态存储,和应用的进程绑定,只能在UI主线程中使用,无法在子线程中使用、修改。
解决方案
方案一:使用路由模式保留页面实例。
在页面跳转时不要使用pop和clear等方法,否则NavDestination页面会被回收。可以采用单例模式MOVE_TO_TOP_SINGLETON跳转至指定的页面,该方式会使用栈内已存在的页面实例(即浏览位置不变)。
由于单例模式是从栈底到栈顶依次查找,当栈内存在多个同名页面实例时,会默认跳转最底层的同名页面实例,所以需确保栈内只存在一个同名实例,否则跳转的页面保留的滚动位置与上一次显示的页面会不一致(显示的是栈底同名实例保留的滚动位置)。
https://pastebin.com/Kvfw56Ui
https://pastebin.com/6Jk0iJHg
https://pastebin.com/aHSWm99J
https://pastebin.com/FgCAfbE3
https://pastebin.com/TdJAtZuS
https://pastebin.com/t5prk0xM
https://pastebin.com/9KBv8p6Z
https://pastebin.com/QzHRmSST
https://pastebin.com/EYerCiYE
https://pastebin.com/KQYtdiVR
https://pastebin.com/qPDGQpr7
https://pastebin.com/Ur2cbXAg
https://pastebin.com/niVM6VLk
https://pastebin.com/XpBnqUwS
https://pastebin.com/ndDMLQMC
https://pastebin.com/Fe0WC3pa
https://pastebin.com/RrnvPE1w
https://pastebin.com/bD5WPwRg
https://pastebin.com/YDh64vkT
https://pastebin.com/4LWHr9jc
https://pastebin.com/DCtRCCCk
https://pastebin.com/3p2Jzncu
https://pastebin.com/T3SJ62ar
https://pastebin.com/GKfL979H
https://pastebin.com/XMYGtPje
https://pastebin.com/rzXKvcuv
https://pastebin.com/JvR7cH5d
https://pastebin.com/3FDVEcuX
https://pastebin.com/h6cUiaBF
https://pastebin.com/ME4peSzL
https://pastebin.com/N5qAacXz
https://pastebin.com/JZZwHd6Z
https://pastebin.com/fGN6CmDR
https://pastebin.com/K3EVxehv
https://pastebin.com/PqCXWDDh
https://pastebin.com/fqusPVdu
https://pastebin.com/Dvt50mhL
https://pastebin.com/CtGAWTga
https://pastebin.com/XyuX26ci
https://pastebin.com/d9K2WJJt
https://pastebin.com/GwHXXvtC
https://pastebin.com/DDCwB3nj
https://pastebin.com/w0SKXPMz
https://pastebin.com/pN4H6zQh
https://pastebin.com/2MEDMTDa
https://pastebin.com/Km8YREQ6
https://pastebin.com/JCDkV4YW
https://pastebin.com/DVzuaCcx
https://pastebin.com/uc5iwWuj
https://pastebin.com/gNCWP8Qc
https://pastebin.com/Yu8Egw5s
https://pastebin.com/0LyQQjKP
https://pastebin.com/w5KFZYZd
https://pastebin.com/675wTRDu
https://pastebin.com/q3HydkUg
https://pastebin.com/zw5u9Qdi
https://pastebin.com/mzFWd75m
https://pastebin.com/xa0XPcNr
https://pastebin.com/YTTmLc1J
https://pastebin.com/81JwSJWW
https://pastebin.com/JZ5Yd8mP
https://pastebin.com/HYPHRp3p
https://pastebin.com/i7UKj8g6
https://pastebin.com/eS8TWDJF
https://pastebin.com/s17FvZ9R
https://pastebin.com/YG3qffNc
https://pastebin.com/Jm6jQ9Hr
https://pastebin.com/RyYPmYMa
https://pastebin.com/rtcK0Z53
https://pastebin.com/GX1W9zHA
https://pastebin.com/MydzWJwB
https://pastebin.com/sfxsFT66
https://pastebin.com/aayDqQsH
https://pastebin.com/GHia1M2L
https://pastebin.com/tHvSWiGS
https://pastebin.com/cJmt5rpy
https://pastebin.com/JYDkdGLs
https://pastebin.com/stRVBXTH
https://pastebin.com/G8gY33rM
https://pastebin.com/yWTE4s8z
https://pastebin.com/bF237U4E
https://pastebin.com/A2XjbJFL
https://pastebin.com/CMPsmXHW
https://pastebin.com/XBnbf5yR
https://pastebin.com/2WTSxuZH
https://pastebin.com/x9TYHnnR
https://pastebin.com/yr442rZ9
https://pastebin.com/kTQXdYBq
https://pastebin.com/sXG2mktr
https://pastebin.com/sHKZkR2S
https://pastebin.com/VgaMNyjP
https://pastebin.com/saBuBbfx
https://pastebin.com/Akn339vN
https://pastebin.com/LxJpgWdH
https://pastebin.com/gCUJtG1r
https://pastebin.com/bNS4mhKg
https://pastebin.com/PKcfHFsC
https://pastebin.com/3cMHb88V
https://pastebin.com/3HyqCceQ
https://pastebin.com/NpPEKWNc
https://pastebin.com/Mxr4rfx3
https://pastebin.com/1ND8zgqs
https://pastebin.com/Bk8zT2RD
https://pastebin.com/PivBT23m
https://pastebin.com/PhBTFTus
https://pastebin.com/iRW432jR
https://pastebin.com/W4Euyfpd
https://pastebin.com/E9JLP4M1
https://pastebin.com/2G53rfER
https://pastebin.com/GCiDaiZh
https://pastebin.com/jd9TTX9d
https://pastebin.com/Ah3LCi7e
https://pastebin.com/mNF9WeS7
https://pastebin.com/aKzY3GUc
https://pastebin.com/n7cevaYk
https://pastebin.com/GDDDzUuy
https://pastebin.com/tyx4arNi
https://pastebin.com/j54FMwvB
https://pastebin.com/2cRztMQY
https://pastebin.com/G6WWzmMF
https://pastebin.com/eVszwUfs
https://pastebin.com/D4rYGpE6
https://pastebin.com/6Jya9VEL
https://pastebin.com/vyFWsBCr
https://pastebin.com/pv7BP9vr
https://pastebin.com/RhR9FeUP
https://pastebin.com/vWxFY2YW
https://pastebin.com/Lairj5Ld
https://pastebin.com/jwQKSavR
https://pastebin.com/8GvaRTz1
https://pastebin.com/3YHX2qmE
https://pastebin.com/kssYcnr7
https://pastebin.com/NtnKhtYY
https://pastebin.com/Fz6cc5Le
https://pastebin.com/icc6WRsj
https://pastebin.com/wWk9nFRp
https://pastebin.com/eXQgBJMX
https://pastebin.com/z0xrXUZ3
https://pastebin.com/spSBiP8J
https://pastebin.com/AaUJmpHM
https://pastebin.com/3x1w4uHd
https://pastebin.com/pKZvNg7m
https://pastebin.com/Qb6vxDTQ
https://pastebin.com/P0S6wfBk
https://pastebin.com/444CJvwY
https://pastebin.com/7MkiVbks
https://pastebin.com/45wrx7jX
https://pastebin.com/J6M4Hh9S
https://pastebin.com/T5gQ6kJV
https://pastebin.com/h4K76YnL
https://pastebin.com/Kmx8rkB5
https://pastebin.com/42F7A6X9
https://pastebin.com/qnTdJLyj
https://pastebin.com/LTBywbqr
https://pastebin.com/2sQhNdXp
https://pastebin.com/mhSnZhNt
https://pastebin.com/wEfqig2G
https://pastebin.com/HbyYyFs0
https://pastebin.com/vUXzYbcc
https://pastebin.com/nDJnT1yM
https://pastebin.com/DKM75CX4
https://pastebin.com/hB0980pZ
https://pastebin.com/Nk6s4uGj
https://pastebin.com/PJf3D7tg
https://pastebin.com/5Sr8y30c
https://pastebin.com/huf9nsJ4
https://pastebin.com/xtBzF05M
https://pastebin.com/JFmF4u1f
https://pastebin.com/4zmGeM48
https://pastebin.com/UB9TNyxW
https://pastebin.com/cXSRyukE
https://pastebin.com/XdhcwfBp
https://pastebin.com/UYMVPFgN
https://pastebin.com/c62H8NxQ
https://pastebin.com/84DXZjfQ
https://pastebin.com/fFepWW4H
https://pastebin.com/3Sq1TF6k
https://pastebin.com/SQPTntKg
https://pastebin.com/khc1nD0w
https://pastebin.com/p8beJJva
https://pastebin.com/9LfnVJAJ
https://pastebin.com/M6QchRZ9
https://pastebin.com/Egxy8RxR
https://pastebin.com/D9v72rK6
https://pastebin.com/82dq2ZHB
https://pastebin.com/WtWcMEAa
https://pastebin.com/FhzkMMw1
https://pastebin.com/s5kf22wS
https://pastebin.com/kxXm99HH
https://pastebin.com/ZeUdrbC7
https://pastebin.com/Uyd0wkV5
https://pastebin.com/Gj32PSKS
https://pastebin.com/QWZZkFKR
https://pastebin.com/Hd2BgPS5
https://pastebin.com/hdiUJFS0
https://pastebin.com/u2Gt9cfq
https://pastebin.com/0vHYKc8F
https://pastebin.com/TZVHGvLR
https://pastebin.com/VFxecajq
https://pastebin.com/nWj4HsBJ
https://pastebin.com/G8GUM8fz
https://pastebin.com/LReXd1m0
https://pastebin.com/fpQnrYTL
https://pastebin.com/RyDHm8nK
https://pastebin.com/4gAzEceK
https://pastebin.com/AgGD7Sw8
https://pastebin.com/Zh7srRfN
https://pastebin.com/2y9BHBvR
https://pastebin.com/cZ9yHWab
https://pastebin.com/NRHZcAUe
https://pastebin.com/qfC6uqGY
https://pastebin.com/pzbatnT2
https://pastebin.com/pytQrM3n
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
如何设置APP内全局字体大小
问题现象
在文本量多而杂的场景下,单独给每个Text文本设置字体大小效率不高,有什么方法能够设置APP内的全局字体大小?以便统一设置字体大小,提高效率。
背景知识
动态属性是动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。其属性方法AttributeModifier支持在当前组件上动态设置属性方法。
Text文本组件中的fontSize属性可以设置字体大小,fontFamily属性可以设置字体列表。
接口ApplicationContext.setFontSizeScale设置应用字体大小缩放比例。仅支持主线程调用。当应用字体设置为跟随系统时,通过配置configuration标签就可以设置应用字体大小跟随系统变化的比例。
解决方案
方案一:通过preferences调节应用内全局字体大小。
自定义PreferencesUtil类,通过其提供的创建、保存和查询的数据,将读取到的数据保存到页面带有@State的变量中,通过状态变量对文本字体大小进行设置。具体应用可以参考官网使用preferences实现应用内字体大小调节功能。
方案二:通过动态属性设置全局字体大小。
使用动态属性,自定义class实现AttributeModifier接口,设定好Text需要的fontSize后在页面调用,实现字体大小统一修改。
class MyTextModifier implements AttributeModifier<TextAttribute> {
public isDark: boolean = false;
applyNormalAttribute(instance: TextAttribute): void {
if (this.isDark) {
instance.fontSize(100);
} else {
instance.fontSize(50);
}
}
}
@Entry
@Component
struct Index {
private message: string = 'test';
@State modifier: MyTextModifier = new MyTextModifier();
build() {
Column() {
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
Blank();
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
}
.padding(24)
.width('100%')
.height('100%');
}
}
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
https://pastebin.com/yx39A9W3
https://pastebin.com/YjGpgumr
https://pastebin.com/Yr3NDGsw
https://pastebin.com/mHQDdmYW
https://pastebin.com/zQj53Zez
https://pastebin.com/BPjewhxX
https://pastebin.com/zQ0vrSFY
https://pastebin.com/1w62VYp5
https://pastebin.com/h4KEm2mW
https://pastebin.com/fTskMDFx
https://pastebin.com/FmNtGTnb
https://pastebin.com/16dZdmr6
https://pastebin.com/GDKtKnBU
https://pastebin.com/s1CTn9wk
https://pastebin.com/HWayJh7D
https://pastebin.com/sbNvhpjd
https://pastebin.com/8QS7hR6z
https://pastebin.com/BNmr0siT
https://pastebin.com/wSeQ93jQ
https://pastebin.com/mWDHpM97
https://pastebin.com/n95D4DU9
https://pastebin.com/WwyN4MSy
https://pastebin.com/Yy5piny4
https://pastebin.com/M5eG7d97
https://pastebin.com/tecUdChP
https://pastebin.com/YizPCgVe
https://pastebin.com/k2QgxpVx
https://pastebin.com/L874Auw2
https://pastebin.com/i7xaQUHV
https://pastebin.com/6RYNSaMD
https://pastebin.com/EHGryvUF
https://pastebin.com/mBy1dH2W
https://pastebin.com/4Rv7wPLE
https://pastebin.com/
https://pastebin.com/sc89ynXn
https://pastebin.com/BAmNnWPG
https://pastebin.com/KgFLHfXf
https://pastebin.com/LT7WpAkz
https://pastebin.com/F7bhcEZn
https://pastebin.com/Vt71iUie
https://pastebin.com/b6aTG0vH
https://pastebin.com/YkTNEfNW
https://pastebin.com/xZYNrFV9
https://pastebin.com/URiZmFBE
https://pastebin.com/31PwZST4
https://pastebin.com/9zzUgrh1
https://pastebin.com/t5GZ46L5
https://pastebin.com/jnqax73J
https://pastebin.com/s8ancsQ8
https://pastebin.com/RupTptFa
https://pastebin.com/iqVL98RE
https://pastebin.com/m540xPh3
https://pastebin.com/SGt4MpRD
https://pastebin.com/d4CT63kJ
https://pastebin.com/hhPTDEMT
https://pastebin.com/RHTCf9E2
https://pastebin.com/0T6WBFQs
https://pastebin.com/i1UChYJG
https://pastebin.com/m5EmezEN
https://pastebin.com/7da2hn5E
https://pastebin.com/RCSThm9K
https://pastebin.com/HMwehjXj
https://pastebin.com/5rYR3q2t
https://pastebin.com/2hBwYzin
https://pastebin.com/p7QyQegF
https://pastebin.com/9YchUWAp
https://pastebin.com/9QkWjZS8
https://pastebin.com/dKJcBeWU
https://pastebin.com/y2hUEn5k
https://pastebin.com/PjRCfHQV
https://pastebin.com/Zwvh6Gj6
https://pastebin.com/QQYxQzn7
https://pastebin.com/9TPRM0EL
https://pastebin.com/mAX55z1X
https://pastebin.com/NSCC7keU
https://pastebin.com/zxpEz8CT
https://pastebin.com/N4qU4GBi
https://pastebin.com/fMsMLean
https://pastebin.com/Xgq14P8Z
https://pastebin.com/zD7r5kSj
https://pastebin.com/MA8wHsQp
https://pastebin.com/Ww5Sedpx
https://pastebin.com/MH5DNyY1
https://pastebin.com/A8ZR80ix
https://pastebin.com/An6A0kcB
https://pastebin.com/xfZyEP3r
https://pastebin.com/mCRJJG5k
https://pastebin.com/i8pDjjTr
https://pastebin.com/x5EFGiqg
https://pastebin.com/hdGJGHDa
https://pastebin.com/XvLmLTda
https://pastebin.com/URSmHfMQ
https://pastebin.com/AfL6JvxE
https://pastebin.com/2XwNG2Gv
https://pastebin.com/yCggCwQs
https://pastebin.com/vtfpaBVx
https://pastebin.com/e5QbtBdu
https://pastebin.com/xBW2j2u7
https://pastebin.com/EM9mfHFE
https://pastebin.com/YdSsZfrd
https://pastebin.com/29t7hwPk
https://pastebin.com/AzL6dAAr
https://pastebin.com/9DjHEwu4
https://pastebin.com/zsG1FAQ5
https://pastebin.com/n3u3F4FS
https://pastebin.com/hGb4579u
https://pastebin.com/4iVXD2bm
https://pastebin.com/asamK1S5
https://pastebin.com/7bjibNp4
https://pastebin.com/KJaFD1nA
https://pastebin.com/CcD19MmF
https://pastebin.com/rFBHrupt
https://pastebin.com/Kf4zzEZ1
https://pastebin.com/p07Rr3Dg
https://pastebin.com/TzBYBTKd
https://pastebin.com/3mSdSwZc
https://pastebin.com/vD58SSEh
https://pastebin.com/yL5bYn4f
https://pastebin.com/NfsJ1BJa
https://pastebin.com/Dmf05JZi
https://pastebin.com/ZNAR7d19
https://pastebin.com/ni3NfQvW
https://pastebin.com/G7gt0EP1
https://pastebin.com/wej3w4Vi
https://pastebin.com/d602uf7W
https://pastebin.com/Y43ufxnM
https://pastebin.com/iCT3zSXx
https://pastebin.com/T3jA1SUw
https://pastebin.com/n4U1b4jm
问题现象
在文本量多而杂的场景下,单独给每个Text文本设置字体大小效率不高,有什么方法能够设置APP内的全局字体大小?以便统一设置字体大小,提高效率。
背景知识
动态属性是动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。其属性方法AttributeModifier支持在当前组件上动态设置属性方法。
Text文本组件中的fontSize属性可以设置字体大小,fontFamily属性可以设置字体列表。
接口ApplicationContext.setFontSizeScale设置应用字体大小缩放比例。仅支持主线程调用。当应用字体设置为跟随系统时,通过配置configuration标签就可以设置应用字体大小跟随系统变化的比例。
解决方案
方案一:通过preferences调节应用内全局字体大小。
自定义PreferencesUtil类,通过其提供的创建、保存和查询的数据,将读取到的数据保存到页面带有@State的变量中,通过状态变量对文本字体大小进行设置。具体应用可以参考官网使用preferences实现应用内字体大小调节功能。
方案二:通过动态属性设置全局字体大小。
使用动态属性,自定义class实现AttributeModifier接口,设定好Text需要的fontSize后在页面调用,实现字体大小统一修改。
class MyTextModifier implements AttributeModifier<TextAttribute> {
public isDark: boolean = false;
applyNormalAttribute(instance: TextAttribute): void {
if (this.isDark) {
instance.fontSize(100);
} else {
instance.fontSize(50);
}
}
}
@Entry
@Component
struct Index {
private message: string = 'test';
@State modifier: MyTextModifier = new MyTextModifier();
build() {
Column() {
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
Blank();
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
}
.padding(24)
.width('100%')
.height('100%');
}
}
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
https://pastebin.com/yx39A9W3
https://pastebin.com/YjGpgumr
https://pastebin.com/Yr3NDGsw
https://pastebin.com/mHQDdmYW
https://pastebin.com/zQj53Zez
https://pastebin.com/BPjewhxX
https://pastebin.com/zQ0vrSFY
https://pastebin.com/1w62VYp5
https://pastebin.com/h4KEm2mW
https://pastebin.com/fTskMDFx
https://pastebin.com/FmNtGTnb
https://pastebin.com/16dZdmr6
https://pastebin.com/GDKtKnBU
https://pastebin.com/s1CTn9wk
https://pastebin.com/HWayJh7D
https://pastebin.com/sbNvhpjd
https://pastebin.com/8QS7hR6z
https://pastebin.com/BNmr0siT
https://pastebin.com/wSeQ93jQ
https://pastebin.com/mWDHpM97
https://pastebin.com/n95D4DU9
https://pastebin.com/WwyN4MSy
https://pastebin.com/Yy5piny4
https://pastebin.com/M5eG7d97
https://pastebin.com/tecUdChP
https://pastebin.com/YizPCgVe
https://pastebin.com/k2QgxpVx
https://pastebin.com/L874Auw2
https://pastebin.com/i7xaQUHV
https://pastebin.com/6RYNSaMD
https://pastebin.com/EHGryvUF
https://pastebin.com/mBy1dH2W
https://pastebin.com/4Rv7wPLE
https://pastebin.com/
https://pastebin.com/sc89ynXn
https://pastebin.com/BAmNnWPG
https://pastebin.com/KgFLHfXf
https://pastebin.com/LT7WpAkz
https://pastebin.com/F7bhcEZn
https://pastebin.com/Vt71iUie
https://pastebin.com/b6aTG0vH
https://pastebin.com/YkTNEfNW
https://pastebin.com/xZYNrFV9
https://pastebin.com/URiZmFBE
https://pastebin.com/31PwZST4
https://pastebin.com/9zzUgrh1
https://pastebin.com/t5GZ46L5
https://pastebin.com/jnqax73J
https://pastebin.com/s8ancsQ8
https://pastebin.com/RupTptFa
https://pastebin.com/iqVL98RE
https://pastebin.com/m540xPh3
https://pastebin.com/SGt4MpRD
https://pastebin.com/d4CT63kJ
https://pastebin.com/hhPTDEMT
https://pastebin.com/RHTCf9E2
https://pastebin.com/0T6WBFQs
https://pastebin.com/i1UChYJG
https://pastebin.com/m5EmezEN
https://pastebin.com/7da2hn5E
https://pastebin.com/RCSThm9K
https://pastebin.com/HMwehjXj
https://pastebin.com/5rYR3q2t
https://pastebin.com/2hBwYzin
https://pastebin.com/p7QyQegF
https://pastebin.com/9YchUWAp
https://pastebin.com/9QkWjZS8
https://pastebin.com/dKJcBeWU
https://pastebin.com/y2hUEn5k
https://pastebin.com/PjRCfHQV
https://pastebin.com/Zwvh6Gj6
https://pastebin.com/QQYxQzn7
https://pastebin.com/9TPRM0EL
https://pastebin.com/mAX55z1X
https://pastebin.com/NSCC7keU
https://pastebin.com/zxpEz8CT
https://pastebin.com/N4qU4GBi
https://pastebin.com/fMsMLean
https://pastebin.com/Xgq14P8Z
https://pastebin.com/zD7r5kSj
https://pastebin.com/MA8wHsQp
https://pastebin.com/Ww5Sedpx
https://pastebin.com/MH5DNyY1
https://pastebin.com/A8ZR80ix
https://pastebin.com/An6A0kcB
https://pastebin.com/xfZyEP3r
https://pastebin.com/mCRJJG5k
https://pastebin.com/i8pDjjTr
https://pastebin.com/x5EFGiqg
https://pastebin.com/hdGJGHDa
https://pastebin.com/XvLmLTda
https://pastebin.com/URSmHfMQ
https://pastebin.com/AfL6JvxE
https://pastebin.com/2XwNG2Gv
https://pastebin.com/yCggCwQs
https://pastebin.com/vtfpaBVx
https://pastebin.com/e5QbtBdu
https://pastebin.com/xBW2j2u7
https://pastebin.com/EM9mfHFE
https://pastebin.com/YdSsZfrd
https://pastebin.com/29t7hwPk
https://pastebin.com/AzL6dAAr
https://pastebin.com/9DjHEwu4
https://pastebin.com/zsG1FAQ5
https://pastebin.com/n3u3F4FS
https://pastebin.com/hGb4579u
https://pastebin.com/4iVXD2bm
https://pastebin.com/asamK1S5
https://pastebin.com/7bjibNp4
https://pastebin.com/KJaFD1nA
https://pastebin.com/CcD19MmF
https://pastebin.com/rFBHrupt
https://pastebin.com/Kf4zzEZ1
https://pastebin.com/p07Rr3Dg
https://pastebin.com/TzBYBTKd
https://pastebin.com/3mSdSwZc
https://pastebin.com/vD58SSEh
https://pastebin.com/yL5bYn4f
https://pastebin.com/NfsJ1BJa
https://pastebin.com/Dmf05JZi
https://pastebin.com/ZNAR7d19
https://pastebin.com/ni3NfQvW
https://pastebin.com/G7gt0EP1
https://pastebin.com/wej3w4Vi
https://pastebin.com/d602uf7W
https://pastebin.com/Y43ufxnM
https://pastebin.com/iCT3zSXx
https://pastebin.com/T3jA1SUw
https://pastebin.com/n4U1b4jm
如何混用Navigation和router实现路由导航
问题现象
如何实现Navigation和router的混用?
背景知识
router:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、同应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
Navigation:用于实现Navigation页面(NavDestination)间的跳转,支持在不同Navigation页面间传递参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器。
解决方案
对于router跳转到的页面需要使用Navigation作为根容器,才能在这个页面跳转到下个NavDestination页面。这是因为router跳转的是page页面,而NavDestination是Navigation的子组件,二者层次不同。以下为Navigation和router混用的三种常见场景。
场景一
Navigation页面与router页面间的跳转,如:入口页面->NavPageOne->RouterPageOne->NavPageTwo。该混用场景常见于“全局导航 局部导航”的页面设计,例如首页到隐私模块页面等。
使用router跳转到RouterPageOne,RouterPageOne使用Navigation作为根容器跳转到NavPageTwo,这里RouterPageOne的Navigation和第一个Navigation相互独立,都有各自的路由栈,互不影响。开发者需参考系统路由表配置Navigation路由,配置说明附在本文末尾。
入口页面代码如下:需在resources/base/profile/main_pages.json配置,参考pages标签。
https://pastebin.com/T0qjEdhR
https://pastebin.com/9j2xhYmA
https://pastebin.com/y3qDY8zJ
https://pastebin.com/ACGMG4Ja
https://pastebin.com/hMkaAgnr
https://pastebin.com/DKCau8pY
https://pastebin.com/KMR7ahzA
https://pastebin.com/tJvRKc4N
https://pastebin.com/NVEwG9uZ
https://pastebin.com/EPxLpA6i
https://pastebin.com/FK8MaSeV
https://pastebin.com/CytN6Qcs
https://pastebin.com/q7ugna3X
https://pastebin.com/EjiwDGkT
https://pastebin.com/nsPUWMri
https://pastebin.com/SbiDFTm9
https://pastebin.com/mNrgbF0F
https://pastebin.com/x6eZ1ygU
https://pastebin.com/PBL5tVYf
https://pastebin.com/jX1mX3T0
https://pastebin.com/WXYZUzhC
https://pastebin.com/UDyfqTN0
https://pastebin.com/wXk3dYJG
https://pastebin.com/dSzW4S5n
https://pastebin.com/iud6XZSS
https://pastebin.com/scHYNFMf
https://pastebin.com/AeHxaU7w
https://pastebin.com/H7Au1Apz
https://pastebin.com/DRCNjV3v
https://pastebin.com/7gv7ubWE
https://pastebin.com/SZdUViky
https://pastebin.com/cp63TTTg
https://pastebin.com/fzCVAvCF
https://pastebin.com/jJ4Tgfcm
https://pastebin.com/gKUBHbAx
https://pastebin.com/SHxpbQus
https://pastebin.com/PUgXw4SZ
https://pastebin.com/kQudDe6v
https://pastebin.com/Q8kzX5QG
https://pastebin.com/gJTuU53X
https://pastebin.com/tgUM3kmm
https://pastebin.com/XSzcmndG
https://pastebin.com/STYGr8HQ
https://pastebin.com/Cke4tPN7
https://pastebin.com/G9vGA4VD
https://pastebin.com/9Qdn0wFX
https://pastebin.com/fNK8TZBi
https://pastebin.com/BaX3LH8U
https://pastebin.com/ZZQcNB1N
https://pastebin.com/X9RbKjBw
https://pastebin.com/KAJYpJte
https://pastebin.com/vnKJfsX4
https://pastebin.com/Kd1Xm439
https://pastebin.com/VEBbiMGW
https://pastebin.com/asWsvVUg
https://pastebin.com/bADNrv39
https://pastebin.com/dbE231R1
https://pastebin.com/urCZ7b7n
https://pastebin.com/rJUkQLTy
https://pastebin.com/0WJW2iZm
https://pastebin.com/MYR6YbuM
https://pastebin.com/FvqPxU7T
https://pastebin.com/RHgL2GWD
https://pastebin.com/zfUdLzmn
https://pastebin.com/3RiMytue
https://pastebin.com/8Q0gji6p
https://pastebin.com/bURMaJ6s
https://pastebin.com/vSEEbx6q
https://pastebin.com/sxF2ewtt
https://pastebin.com/qS8u7xGj
https://pastebin.com/Pi4zhEac
https://pastebin.com/3BWfDUkr
https://pastebin.com/Mfvfq5a1
https://pastebin.com/8GucH56m
https://pastebin.com/3g8rK644
https://pastebin.com/86tms6GZ
https://pastebin.com/6PeE5NJ9
https://pastebin.com/zQZMR3uQ
https://pastebin.com/ZzKRebtY
https://pastebin.com/RXSvMK0S
https://pastebin.com/EJkW2AzU
https://pastebin.com/HV1WwkJr
https://pastebin.com/3bj7RrVR
https://pastebin.com/5CgX4SEE
https://pastebin.com/z8MPVtnX
https://pastebin.com/UX0Am16Z
https://pastebin.com/SNgYcfe9
https://pastebin.com/5qiLcbAd
https://pastebin.com/XZcpNxKU
https://pastebin.com/g1eR9CPP
https://pastebin.com/uJeVWMAd
https://pastebin.com/gRjHa4ex
https://pastebin.com/EBarihNi
https://pastebin.com/sMg2cGSe
https://pastebin.com/Z8MPPgLr
https://pastebin.com/LyUNjkvn
https://pastebin.com/S3eeuU8M
https://pastebin.com/e1bYnW5j
https://pastebin.com/QYdf4Mv9
https://pastebin.com/mQJQHVzW
https://pastebin.com/andd0da6
https://pastebin.com/PeTHqrxq
https://pastebin.com/P6gk0Tj9
https://pastebin.com/QQ2dxGdL
https://pastebin.com/E2ibKkNu
https://pastebin.com/YC0sK7jB
https://pastebin.com/1EYYscyi
https://pastebin.com/FRXXxWwg
https://pastebin.com/ZXXi9xM1
https://pastebin.com/0izhXiFJ
https://pastebin.com/3sPJWA9h
https://pastebin.com/C9s6zMRc
https://pastebin.com/92djJXhJ
https://pastebin.com/rxLq7fK7
https://pastebin.com/1jjxq2y7
https://pastebin.com/RQuravmU
https://pastebin.com/0HC8tnCM
https://pastebin.com/qV828LM2
https://pastebin.com/KsTnZQKK
https://pastebin.com/0DGQvkf5
https://pastebin.com/ZpSpZ1ad
https://pastebin.com/RyCxRXXc
https://pastebin.com/FNT47tiG
https://pastebin.com/M9kRCjFZ
https://pastebin.com/5FYBqVba
https://pastebin.com/tc3AxKPP
https://pastebin.com/cmEzD2cm
https://pastebin.com/G8epzgNn
https://pastebin.com/DvkkCE48
https://pastebin.com/qQn5nr1T
https://pastebin.com/LdRyg3fJ
https://pastebin.com/bhMmk2QE
https://pastebin.com/Ezp4M2mU
https://pastebin.com/pgc1FurG
https://pastebin.com/Ct29GCzi
https://pastebin.com/X2SibK2k
https://pastebin.com/cPyP1sGv
https://pastebin.com/BpRi9nQ3
https://pastebin.com/PuEQk2D5
https://pastebin.com/LqQtd4xC
https://pastebin.com/0m9SGErQ
https://pastebin.com/2TjekbUJ
https://pastebin.com/LCfheMsR
https://pastebin.com/KBGaUPqA
https://pastebin.com/adQ498ic
https://pastebin.com/0wuucsZ0
https://pastebin.com/5p9vtftU
https://pastebin.com/NBdsXhQi
https://pastebin.com/N1rgsNYD
https://pastebin.com/pNyDCENQ
https://pastebin.com/9cDP15GL
https://pastebin.com/F2a621ab
https://pastebin.com/aJ9PzUyf
https://pastebin.com/P5UjJuY1
https://pastebin.com/Sn9J5rLr
https://pastebin.com/3rQRmumG
https://pastebin.com/QNSSbDRg
https://pastebin.com/csLrWKhY
https://pastebin.com/Ceg1c07i
https://pastebin.com/hwKtUzVf
https://pastebin.com/WzAyiC5N
https://pastebin.com/qDteic1q
https://pastebin.com/tfYq4WsV
https://pastebin.com/bRqVufy3
https://pastebin.com/93ex9FyT
https://pastebin.com/stpFZB0f
https://pastebin.com/GAm5Qri7
https://pastebin.com/a5xG0wd1
https://pastebin.com/2J1Hiqvm
https://pastebin.com/gh7CZTcv
https://pastebin.com/XLdTknfz
https://pastebin.com/CUjaXXKR
https://pastebin.com/RHVccDjS
https://pastebin.com/Fyc2a9PC
https://pastebin.com/Y7QzDaEQ
https://pastebin.com/30AHcs66
https://pastebin.com/76dUwnrz
https://pastebin.com/Eefce3y4
https://pastebin.com/rgUGwQR4
https://pastebin.com/b1wjhncJ
https://pastebin.com/ReNE2D36
https://pastebin.com/vyJXbMcD
https://pastebin.com/vYKvCKch
https://pastebin.com/XfHEyEgJ
https://pastebin.com/v8zRpCdK
https://pastebin.com/fFVAe7NL
https://pastebin.com/USryqJTr
https://pastebin.com/yAc9niyy
https://pastebin.com/nkJB8XRC
https://pastebin.com/PSqZGpwq
https://pastebin.com/ZD0VWb9t
https://pastebin.com/5YsLCMSB
https://pastebin.com/yXkvdiH1
https://pastebin.com/4YzAMWHC
https://pastebin.com/QaVh0Srp
https://pastebin.com/d9Yjsr9D
https://pastebin.com/4rKTisyH
https://pastebin.com/jGe97xbT
https://pastebin.com/KCFPzysq
https://pastebin.com/JXVdBeaz
问题现象
如何实现Navigation和router的混用?
背景知识
router:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、同应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
Navigation:用于实现Navigation页面(NavDestination)间的跳转,支持在不同Navigation页面间传递参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器。
解决方案
对于router跳转到的页面需要使用Navigation作为根容器,才能在这个页面跳转到下个NavDestination页面。这是因为router跳转的是page页面,而NavDestination是Navigation的子组件,二者层次不同。以下为Navigation和router混用的三种常见场景。
场景一
Navigation页面与router页面间的跳转,如:入口页面->NavPageOne->RouterPageOne->NavPageTwo。该混用场景常见于“全局导航 局部导航”的页面设计,例如首页到隐私模块页面等。
使用router跳转到RouterPageOne,RouterPageOne使用Navigation作为根容器跳转到NavPageTwo,这里RouterPageOne的Navigation和第一个Navigation相互独立,都有各自的路由栈,互不影响。开发者需参考系统路由表配置Navigation路由,配置说明附在本文末尾。
入口页面代码如下:需在resources/base/profile/main_pages.json配置,参考pages标签。
https://pastebin.com/T0qjEdhR
https://pastebin.com/9j2xhYmA
https://pastebin.com/y3qDY8zJ
https://pastebin.com/ACGMG4Ja
https://pastebin.com/hMkaAgnr
https://pastebin.com/DKCau8pY
https://pastebin.com/KMR7ahzA
https://pastebin.com/tJvRKc4N
https://pastebin.com/NVEwG9uZ
https://pastebin.com/EPxLpA6i
https://pastebin.com/FK8MaSeV
https://pastebin.com/CytN6Qcs
https://pastebin.com/q7ugna3X
https://pastebin.com/EjiwDGkT
https://pastebin.com/nsPUWMri
https://pastebin.com/SbiDFTm9
https://pastebin.com/mNrgbF0F
https://pastebin.com/x6eZ1ygU
https://pastebin.com/PBL5tVYf
https://pastebin.com/jX1mX3T0
https://pastebin.com/WXYZUzhC
https://pastebin.com/UDyfqTN0
https://pastebin.com/wXk3dYJG
https://pastebin.com/dSzW4S5n
https://pastebin.com/iud6XZSS
https://pastebin.com/scHYNFMf
https://pastebin.com/AeHxaU7w
https://pastebin.com/H7Au1Apz
https://pastebin.com/DRCNjV3v
https://pastebin.com/7gv7ubWE
https://pastebin.com/SZdUViky
https://pastebin.com/cp63TTTg
https://pastebin.com/fzCVAvCF
https://pastebin.com/jJ4Tgfcm
https://pastebin.com/gKUBHbAx
https://pastebin.com/SHxpbQus
https://pastebin.com/PUgXw4SZ
https://pastebin.com/kQudDe6v
https://pastebin.com/Q8kzX5QG
https://pastebin.com/gJTuU53X
https://pastebin.com/tgUM3kmm
https://pastebin.com/XSzcmndG
https://pastebin.com/STYGr8HQ
https://pastebin.com/Cke4tPN7
https://pastebin.com/G9vGA4VD
https://pastebin.com/9Qdn0wFX
https://pastebin.com/fNK8TZBi
https://pastebin.com/BaX3LH8U
https://pastebin.com/ZZQcNB1N
https://pastebin.com/X9RbKjBw
https://pastebin.com/KAJYpJte
https://pastebin.com/vnKJfsX4
https://pastebin.com/Kd1Xm439
https://pastebin.com/VEBbiMGW
https://pastebin.com/asWsvVUg
https://pastebin.com/bADNrv39
https://pastebin.com/dbE231R1
https://pastebin.com/urCZ7b7n
https://pastebin.com/rJUkQLTy
https://pastebin.com/0WJW2iZm
https://pastebin.com/MYR6YbuM
https://pastebin.com/FvqPxU7T
https://pastebin.com/RHgL2GWD
https://pastebin.com/zfUdLzmn
https://pastebin.com/3RiMytue
https://pastebin.com/8Q0gji6p
https://pastebin.com/bURMaJ6s
https://pastebin.com/vSEEbx6q
https://pastebin.com/sxF2ewtt
https://pastebin.com/qS8u7xGj
https://pastebin.com/Pi4zhEac
https://pastebin.com/3BWfDUkr
https://pastebin.com/Mfvfq5a1
https://pastebin.com/8GucH56m
https://pastebin.com/3g8rK644
https://pastebin.com/86tms6GZ
https://pastebin.com/6PeE5NJ9
https://pastebin.com/zQZMR3uQ
https://pastebin.com/ZzKRebtY
https://pastebin.com/RXSvMK0S
https://pastebin.com/EJkW2AzU
https://pastebin.com/HV1WwkJr
https://pastebin.com/3bj7RrVR
https://pastebin.com/5CgX4SEE
https://pastebin.com/z8MPVtnX
https://pastebin.com/UX0Am16Z
https://pastebin.com/SNgYcfe9
https://pastebin.com/5qiLcbAd
https://pastebin.com/XZcpNxKU
https://pastebin.com/g1eR9CPP
https://pastebin.com/uJeVWMAd
https://pastebin.com/gRjHa4ex
https://pastebin.com/EBarihNi
https://pastebin.com/sMg2cGSe
https://pastebin.com/Z8MPPgLr
https://pastebin.com/LyUNjkvn
https://pastebin.com/S3eeuU8M
https://pastebin.com/e1bYnW5j
https://pastebin.com/QYdf4Mv9
https://pastebin.com/mQJQHVzW
https://pastebin.com/andd0da6
https://pastebin.com/PeTHqrxq
https://pastebin.com/P6gk0Tj9
https://pastebin.com/QQ2dxGdL
https://pastebin.com/E2ibKkNu
https://pastebin.com/YC0sK7jB
https://pastebin.com/1EYYscyi
https://pastebin.com/FRXXxWwg
https://pastebin.com/ZXXi9xM1
https://pastebin.com/0izhXiFJ
https://pastebin.com/3sPJWA9h
https://pastebin.com/C9s6zMRc
https://pastebin.com/92djJXhJ
https://pastebin.com/rxLq7fK7
https://pastebin.com/1jjxq2y7
https://pastebin.com/RQuravmU
https://pastebin.com/0HC8tnCM
https://pastebin.com/qV828LM2
https://pastebin.com/KsTnZQKK
https://pastebin.com/0DGQvkf5
https://pastebin.com/ZpSpZ1ad
https://pastebin.com/RyCxRXXc
https://pastebin.com/FNT47tiG
https://pastebin.com/M9kRCjFZ
https://pastebin.com/5FYBqVba
https://pastebin.com/tc3AxKPP
https://pastebin.com/cmEzD2cm
https://pastebin.com/G8epzgNn
https://pastebin.com/DvkkCE48
https://pastebin.com/qQn5nr1T
https://pastebin.com/LdRyg3fJ
https://pastebin.com/bhMmk2QE
https://pastebin.com/Ezp4M2mU
https://pastebin.com/pgc1FurG
https://pastebin.com/Ct29GCzi
https://pastebin.com/X2SibK2k
https://pastebin.com/cPyP1sGv
https://pastebin.com/BpRi9nQ3
https://pastebin.com/PuEQk2D5
https://pastebin.com/LqQtd4xC
https://pastebin.com/0m9SGErQ
https://pastebin.com/2TjekbUJ
https://pastebin.com/LCfheMsR
https://pastebin.com/KBGaUPqA
https://pastebin.com/adQ498ic
https://pastebin.com/0wuucsZ0
https://pastebin.com/5p9vtftU
https://pastebin.com/NBdsXhQi
https://pastebin.com/N1rgsNYD
https://pastebin.com/pNyDCENQ
https://pastebin.com/9cDP15GL
https://pastebin.com/F2a621ab
https://pastebin.com/aJ9PzUyf
https://pastebin.com/P5UjJuY1
https://pastebin.com/Sn9J5rLr
https://pastebin.com/3rQRmumG
https://pastebin.com/QNSSbDRg
https://pastebin.com/csLrWKhY
https://pastebin.com/Ceg1c07i
https://pastebin.com/hwKtUzVf
https://pastebin.com/WzAyiC5N
https://pastebin.com/qDteic1q
https://pastebin.com/tfYq4WsV
https://pastebin.com/bRqVufy3
https://pastebin.com/93ex9FyT
https://pastebin.com/stpFZB0f
https://pastebin.com/GAm5Qri7
https://pastebin.com/a5xG0wd1
https://pastebin.com/2J1Hiqvm
https://pastebin.com/gh7CZTcv
https://pastebin.com/XLdTknfz
https://pastebin.com/CUjaXXKR
https://pastebin.com/RHVccDjS
https://pastebin.com/Fyc2a9PC
https://pastebin.com/Y7QzDaEQ
https://pastebin.com/30AHcs66
https://pastebin.com/76dUwnrz
https://pastebin.com/Eefce3y4
https://pastebin.com/rgUGwQR4
https://pastebin.com/b1wjhncJ
https://pastebin.com/ReNE2D36
https://pastebin.com/vyJXbMcD
https://pastebin.com/vYKvCKch
https://pastebin.com/XfHEyEgJ
https://pastebin.com/v8zRpCdK
https://pastebin.com/fFVAe7NL
https://pastebin.com/USryqJTr
https://pastebin.com/yAc9niyy
https://pastebin.com/nkJB8XRC
https://pastebin.com/PSqZGpwq
https://pastebin.com/ZD0VWb9t
https://pastebin.com/5YsLCMSB
https://pastebin.com/yXkvdiH1
https://pastebin.com/4YzAMWHC
https://pastebin.com/QaVh0Srp
https://pastebin.com/d9Yjsr9D
https://pastebin.com/4rKTisyH
https://pastebin.com/jGe97xbT
https://pastebin.com/KCFPzysq
https://pastebin.com/JXVdBeaz
云打包次数限制,除了账号次数限制,还有电脑限制 吃相也太难看了
吃相也太难看了!
账号次数限制 ok 我承认我今天打包次数很多 但是 测试插件兼容性就是有问题要一直测啊
特意注册了一个新账号测试插件功能
结果又说本电脑打包太多次了,那就一开始就提示本电脑打包太多次了啊
测试插件有问题就是要调试很多次啊
我也不是恶意的浪费资源
真的很生气 操作半天还是不行
就是让花钱打包 一开始就说清楚啊
吃相也太难看了!
账号次数限制 ok 我承认我今天打包次数很多 但是 测试插件兼容性就是有问题要一直测啊
特意注册了一个新账号测试插件功能
结果又说本电脑打包太多次了,那就一开始就提示本电脑打包太多次了啊
测试插件有问题就是要调试很多次啊
我也不是恶意的浪费资源
真的很生气 操作半天还是不行
就是让花钱打包 一开始就说清楚啊
Uni-App iOS 上架全流程|Windows(Win7/10/11)免 Mac 制作 P12 证书 + 描述文件 + IPA 上传完整教程
前言
做 Uni-App 开发的团队大多以 Windows 电脑为主,传统 iOS 上架必须依赖 Mac 电脑,通过钥匙串生成 CSR、制作 P12 发布证书、创建 mobileprovision 描述文件,再用 Xcode/Transporter 上传 IPA,硬件成本高、多账号极易触发苹果 3.2 (f) 关联风控批量封号。
很多中小团队没有 Mac 设备,虚拟机隔离又存在底层设备指纹泄露、卡顿超时、隐性账号关联等致命缺陷;而iOSUploader完美解决痛点,全 Windows 兼容(Win7/8/10/11),仅 45.2MB 轻量化工具,
无需 Mac、无需虚拟机,一站式完成 Bundle ID 创建、P12 证书生成、描述文件制作、HBuilderX 云打包 IPA 分片上传、App Store 后台元数据管理,同时内置独立隔离环境,规避苹果多账号关联封号风险。
官网地址:https://iosuploader.xinxishehui.com/
核心优势:
全 Windows 兼容,最低支持 Win7 老旧办公电脑;
纯软件隔离,斩断设备 / 网络指纹,规避 3.2 (f) 批量封号;
全程不用 Apple ID 密码,仅 P8 密钥 API 授权,杜绝账号泄露;
一站式证书、Bundle ID、设备 UDID、描述文件管理;
直接上传 IPA 至 App Store Connect,替代 Xcode、Transporter;
批量管理多开发者账号,适配 UniApp、Flutter 跨平台项目。
**一、前期准备工作
- 基础环境**
Windows 系统:Win7/Win8/Win10/Win11 32/64 位均可;
下载 iOSUploader v2.1.3,大小 45.2MB,解压直接运行无需安装;
有效苹果开发者付费账号(个人 / 企业账号,免费账号无法上架 App Store);
Uni-App 项目(HBuilderX 开发完成,manifest.json 提前规划 Bundle ID);
提前获取 App Store Connect API 三要素:Issuer ID、Key ID、P8 密钥文件(全程免账号密码登录)。 - 提前获取 P8 密钥(关键,免 Apple ID 登录)
登录 App Store Connect → 用户和访问 → API 密钥;
点击「+」新建密钥,命名自定义,权限选 App 管理员;
生成后仅一次下载 AuthKey_xxx.p8 文件,妥善保存;
复制页面上方 Issuer ID、列表内 Key ID,填入 iOSUploader 设置面板;
优势:不用输入 Apple ID 与登录密码,多人协作不会泄露账号,大幅降低 3.2 (f) 违规关联风险。
二、Windows 端用 iOSUploader 创建 Bundle ID(应用唯一包名)
Bundle ID 是 UniApp iOS 应用唯一标识,证书、描述文件、打包必须保持完全一致,传统操作需登录苹果开发者网页,iOSUploader 内置可视化创建面板:
打开 iOSUploader,左侧菜单栏切换「Bundle ID 管理」;
点击「创建 Bundle」,填写名称、自定义包名(格式:com. 公司名。项目名,例:com.xxx.uniappshop);
按需勾选 App 权限服务:推送通知、Apple 登录、iCloud、支付、NFC、Game Center 等 UniApp 所需能力;
确认创建,工具自动同步至苹果开发者后台,列表可查看、管理所有 Bundle ID;
复制 Bundle ID,保存至 HBuilderX,后续打包统一填写。
三、Windows 无 Mac 生成 P12 发布证书(打包必备签名文件)
传统 Mac 流程:钥匙串生成 CSR 证书签名请求→开发者后台创建证书→导出 P12,Windows 无钥匙串无法操作,iOSUploader 内置证书生成引擎,一步导出.p12 文件:
步骤 1:进入证书管理面板
左侧菜单「证书管理」→「创建证书」,选择证书类型:
iOS App Development:真机测试、TestFlight 内测;
iOS Distribution(App Store):正式上架打包,本文上架选此项。
步骤 2:生成并导出 P12 文件
填写证书名称,设置 P12 加密密码(打包时必须填写,牢记);
工具自动生成 CSR 并提交苹果服务器,无需手动操作;
创建成功后,本地导出.p12证书文件,单独存放;
工具列表可加载、查看所有证书过期时间,支持批量管理多账号证书;
注意:单个开发者账号最多 3 个发布证书,旧证书无用可直接在工具内删除释放名额。
四、Windows 制作.mobileprovision 描述文件
描述文件绑定 Bundle ID+P12 证书,是 UniApp 云打包签名核心文件,分开发 / 发布两类:
iOSUploader 左侧「描述文件管理」→「创建描述文件」;
类型选择:App Store(发布上架);
选择上一步创建的 Bundle ID,勾选刚生成的 Distribution 发布证书;
自定义描述文件名称,确认生成;
下载.mobileprovision描述文件保存本地;
开发测试版额外勾选设备 UDID,可在工具「设备管理」批量录入测试机 UDID。
五、HBuilderX Uni-App 云打包 IPA(Windows 全程操作)
无需 Mac 本地编译,DCloud 云打包直接产出 IPA 安装包:
HBuilderX 打开 UniApp 项目,顶部菜单:发行 → 原生 App - 云打包 → iOS;
打包参数配置:
应用包名(Bundle ID):与 iOSUploader 创建的包名完全一致;
版本号、build 内部版本号按需填写;
证书选择「自有证书」,上传 Windows 导出的.p12文件,输入 P12 加密密码;
上传对应.mobileprovision描述文件;
勾选应用图标、启动图,确认打包;
等待云端编译完成,下载生成的.ipa安装包到 Windows 本地。
六、iOSUploader Windows 上传 IPA 至 App Store Connect(免 Mac 上传)
摒弃 Xcode、Transporter 仅 Mac 可用限制,单台 Win7 电脑即可分片上传 IPA,自带防关联隔离通道:
打开 iOSUploader「上传管理」,顶部设置填入提前准备的 Issuer ID、Key ID、P8 证书路径,保存 API 授权;
点击「选择 IPA」,选中 HBuilderX 下载的 ipa 文件;
工具自动分片上传(超大文件分块传输,断点续传),实时显示上传日志;
上传完成自动创建 App Store 构建版本,无需登录网页后台;
配套功能:
截图管理:批量上传各尺寸 iPhone/iPad 截图,支持多语言;
应用元数据编辑:简介、关键词、销售地区、价格、年龄分级;
审核消息中心:查看苹果官方留言、回复审核问题、管理附件;
批量管理多应用、多账号切换,每个窗口独立隔离环境,杜绝账号关联。
七、关键:规避苹果 3.2 (f) 多账号关联封号(iOSUploader 核心价值)
大量 UniApp 多项目团队踩坑:同一台电脑、同一网络操作多个苹果开发者账号,被苹果风控判定环境关联,触发 3.2 (f) 条款连锁封号,所有账号应用下架、收益冻结、申诉成功率极低。
传统方案短板对比
表格
方案 成本 风控风险 Windows 适配
多台 Mac 物理隔离 极高,设备折旧运维贵 共用网络仍存在关联风险 不支持
Windows 虚拟机 高,占用大量内存硬盘 底层设备标识泄露,批量封号频发 卡顿、上传超时
iOSUploader 纯软件隔离 极低,单台电脑管理上百账号 独立隔离环境,无硬件指纹交叉 Win7 全兼容
工具防关联机制
独立隔离上传通道,不携带本机硬件、网卡、系统缓存信息;
多开工具窗口,每个账号独立运行环境,数据完全隔离;
API P8 密钥授权,全程不登录 Apple ID,消除账号登录轨迹关联;
上传、证书、Bundle ID 操作无统一设备指纹留痕,规避风控追溯链路。
九、常见报错排查(Windows 免 Mac 流程高频问题)
云打包签名失败:P12 密码错误、Bundle ID 与描述文件不匹配、证书过期;
IPA 上传失败:P8 密钥失效(重新生成下载)、网络波动(工具支持分片续传);
账号关联标记:停止共用虚拟机 / 旧上传工具,切换 iOSUploader 独立隔离窗口操作;
Win7 运行异常:关闭系统防火墙兼容拦截,解压工具至纯英文路径。
结语
对于全部使用 Windows 开发 UniApp 的团队,iOSUploader 彻底打破「iOS 上架必须买 Mac」的行业固有认知,从证书制作、描述文件生成、云打包到 IPA 上传、应用后台管理实现全流程 Windows 闭环,最低老旧 Win7 电脑即可运行。同时依托软件级账号隔离能力,从根源规避苹果 3.2 (f) 关联封号风险,大幅降低硬件采购与账号资产损失成本,是 UniApp、Flutter 跨平台开发者无 Mac 上架 iOS 的刚需工具。
工具官网:https://iosuploader.xinxishehui.com/
前言
做 Uni-App 开发的团队大多以 Windows 电脑为主,传统 iOS 上架必须依赖 Mac 电脑,通过钥匙串生成 CSR、制作 P12 发布证书、创建 mobileprovision 描述文件,再用 Xcode/Transporter 上传 IPA,硬件成本高、多账号极易触发苹果 3.2 (f) 关联风控批量封号。
很多中小团队没有 Mac 设备,虚拟机隔离又存在底层设备指纹泄露、卡顿超时、隐性账号关联等致命缺陷;而iOSUploader完美解决痛点,全 Windows 兼容(Win7/8/10/11),仅 45.2MB 轻量化工具,
无需 Mac、无需虚拟机,一站式完成 Bundle ID 创建、P12 证书生成、描述文件制作、HBuilderX 云打包 IPA 分片上传、App Store 后台元数据管理,同时内置独立隔离环境,规避苹果多账号关联封号风险。
官网地址:https://iosuploader.xinxishehui.com/
核心优势:
全 Windows 兼容,最低支持 Win7 老旧办公电脑;
纯软件隔离,斩断设备 / 网络指纹,规避 3.2 (f) 批量封号;
全程不用 Apple ID 密码,仅 P8 密钥 API 授权,杜绝账号泄露;
一站式证书、Bundle ID、设备 UDID、描述文件管理;
直接上传 IPA 至 App Store Connect,替代 Xcode、Transporter;
批量管理多开发者账号,适配 UniApp、Flutter 跨平台项目。
**一、前期准备工作
- 基础环境**
Windows 系统:Win7/Win8/Win10/Win11 32/64 位均可;
下载 iOSUploader v2.1.3,大小 45.2MB,解压直接运行无需安装;
有效苹果开发者付费账号(个人 / 企业账号,免费账号无法上架 App Store);
Uni-App 项目(HBuilderX 开发完成,manifest.json 提前规划 Bundle ID);
提前获取 App Store Connect API 三要素:Issuer ID、Key ID、P8 密钥文件(全程免账号密码登录)。 - 提前获取 P8 密钥(关键,免 Apple ID 登录)
登录 App Store Connect → 用户和访问 → API 密钥;
点击「+」新建密钥,命名自定义,权限选 App 管理员;
生成后仅一次下载 AuthKey_xxx.p8 文件,妥善保存;
复制页面上方 Issuer ID、列表内 Key ID,填入 iOSUploader 设置面板;
优势:不用输入 Apple ID 与登录密码,多人协作不会泄露账号,大幅降低 3.2 (f) 违规关联风险。
二、Windows 端用 iOSUploader 创建 Bundle ID(应用唯一包名)
Bundle ID 是 UniApp iOS 应用唯一标识,证书、描述文件、打包必须保持完全一致,传统操作需登录苹果开发者网页,iOSUploader 内置可视化创建面板:
打开 iOSUploader,左侧菜单栏切换「Bundle ID 管理」;
点击「创建 Bundle」,填写名称、自定义包名(格式:com. 公司名。项目名,例:com.xxx.uniappshop);
按需勾选 App 权限服务:推送通知、Apple 登录、iCloud、支付、NFC、Game Center 等 UniApp 所需能力;
确认创建,工具自动同步至苹果开发者后台,列表可查看、管理所有 Bundle ID;
复制 Bundle ID,保存至 HBuilderX,后续打包统一填写。
三、Windows 无 Mac 生成 P12 发布证书(打包必备签名文件)
传统 Mac 流程:钥匙串生成 CSR 证书签名请求→开发者后台创建证书→导出 P12,Windows 无钥匙串无法操作,iOSUploader 内置证书生成引擎,一步导出.p12 文件:
步骤 1:进入证书管理面板
左侧菜单「证书管理」→「创建证书」,选择证书类型:
iOS App Development:真机测试、TestFlight 内测;
iOS Distribution(App Store):正式上架打包,本文上架选此项。
步骤 2:生成并导出 P12 文件
填写证书名称,设置 P12 加密密码(打包时必须填写,牢记);
工具自动生成 CSR 并提交苹果服务器,无需手动操作;
创建成功后,本地导出.p12证书文件,单独存放;
工具列表可加载、查看所有证书过期时间,支持批量管理多账号证书;
注意:单个开发者账号最多 3 个发布证书,旧证书无用可直接在工具内删除释放名额。
四、Windows 制作.mobileprovision 描述文件
描述文件绑定 Bundle ID+P12 证书,是 UniApp 云打包签名核心文件,分开发 / 发布两类:
iOSUploader 左侧「描述文件管理」→「创建描述文件」;
类型选择:App Store(发布上架);
选择上一步创建的 Bundle ID,勾选刚生成的 Distribution 发布证书;
自定义描述文件名称,确认生成;
下载.mobileprovision描述文件保存本地;
开发测试版额外勾选设备 UDID,可在工具「设备管理」批量录入测试机 UDID。
五、HBuilderX Uni-App 云打包 IPA(Windows 全程操作)
无需 Mac 本地编译,DCloud 云打包直接产出 IPA 安装包:
HBuilderX 打开 UniApp 项目,顶部菜单:发行 → 原生 App - 云打包 → iOS;
打包参数配置:
应用包名(Bundle ID):与 iOSUploader 创建的包名完全一致;
版本号、build 内部版本号按需填写;
证书选择「自有证书」,上传 Windows 导出的.p12文件,输入 P12 加密密码;
上传对应.mobileprovision描述文件;
勾选应用图标、启动图,确认打包;
等待云端编译完成,下载生成的.ipa安装包到 Windows 本地。
六、iOSUploader Windows 上传 IPA 至 App Store Connect(免 Mac 上传)
摒弃 Xcode、Transporter 仅 Mac 可用限制,单台 Win7 电脑即可分片上传 IPA,自带防关联隔离通道:
打开 iOSUploader「上传管理」,顶部设置填入提前准备的 Issuer ID、Key ID、P8 证书路径,保存 API 授权;
点击「选择 IPA」,选中 HBuilderX 下载的 ipa 文件;
工具自动分片上传(超大文件分块传输,断点续传),实时显示上传日志;
上传完成自动创建 App Store 构建版本,无需登录网页后台;
配套功能:
截图管理:批量上传各尺寸 iPhone/iPad 截图,支持多语言;
应用元数据编辑:简介、关键词、销售地区、价格、年龄分级;
审核消息中心:查看苹果官方留言、回复审核问题、管理附件;
批量管理多应用、多账号切换,每个窗口独立隔离环境,杜绝账号关联。
七、关键:规避苹果 3.2 (f) 多账号关联封号(iOSUploader 核心价值)
大量 UniApp 多项目团队踩坑:同一台电脑、同一网络操作多个苹果开发者账号,被苹果风控判定环境关联,触发 3.2 (f) 条款连锁封号,所有账号应用下架、收益冻结、申诉成功率极低。
传统方案短板对比
表格
方案 成本 风控风险 Windows 适配
多台 Mac 物理隔离 极高,设备折旧运维贵 共用网络仍存在关联风险 不支持
Windows 虚拟机 高,占用大量内存硬盘 底层设备标识泄露,批量封号频发 卡顿、上传超时
iOSUploader 纯软件隔离 极低,单台电脑管理上百账号 独立隔离环境,无硬件指纹交叉 Win7 全兼容
工具防关联机制
独立隔离上传通道,不携带本机硬件、网卡、系统缓存信息;
多开工具窗口,每个账号独立运行环境,数据完全隔离;
API P8 密钥授权,全程不登录 Apple ID,消除账号登录轨迹关联;
上传、证书、Bundle ID 操作无统一设备指纹留痕,规避风控追溯链路。
九、常见报错排查(Windows 免 Mac 流程高频问题)
云打包签名失败:P12 密码错误、Bundle ID 与描述文件不匹配、证书过期;
IPA 上传失败:P8 密钥失效(重新生成下载)、网络波动(工具支持分片续传);
账号关联标记:停止共用虚拟机 / 旧上传工具,切换 iOSUploader 独立隔离窗口操作;
Win7 运行异常:关闭系统防火墙兼容拦截,解压工具至纯英文路径。
结语
对于全部使用 Windows 开发 UniApp 的团队,iOSUploader 彻底打破「iOS 上架必须买 Mac」的行业固有认知,从证书制作、描述文件生成、云打包到 IPA 上传、应用后台管理实现全流程 Windows 闭环,最低老旧 Win7 电脑即可运行。同时依托软件级账号隔离能力,从根源规避苹果 3.2 (f) 关联封号风险,大幅降低硬件采购与账号资产损失成本,是 UniApp、Flutter 跨平台开发者无 Mac 上架 iOS 的刚需工具。
工具官网:https://iosuploader.xinxishehui.com/




