├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── ISSUE_TEMPLATE │ └── suggest_anything.md ├── .gitignore ├── Contributors └── README.md ├── LICENSE ├── Posts ├── Swift5 更新笔记.md ├── 老司机技术周报.md ├── 老司机技术周报精品.md └── 让面试官来告诉你,哪类 iOS 开发更容易被青睐?.md ├── README.md ├── Report template.md ├── Reports ├── 2018 │ ├── #1.md │ ├── #10.md │ ├── #11.md │ ├── #12-2018.03.25.md │ ├── #13-2018.03.31.md │ ├── #14-2018.04.09.md │ ├── #15-2018.04.16.md │ ├── #16-2018.04.21.md │ ├── #17-2018.05.02.md │ ├── #18-2018.05.07.md │ ├── #19-2018.05.14.md │ ├── #2.md │ ├── #20-2018.05.21.md │ ├── #21-2018.05.28.md │ ├── #22-2018.06.04.md │ ├── #23-2018.06.18.md │ ├── #24-2018.06.25.md │ ├── #25-2018.07.02.md │ ├── #26-2018.07.09.md │ ├── #27-2018.07.16.md │ ├── #28-2018.07.23.md │ ├── #29-2018.07.30.md │ ├── #3.md │ ├── #30-2018.08.06.md │ ├── #31-2018.08.13.md │ ├── #32-2018.08.20.md │ ├── #33-2018.08.27.md │ ├── #34-2018.09.03.md │ ├── #35-2018.09.10.md │ ├── #36-2018.09.17.md │ ├── #37-2018.09.24.md │ ├── #38-2018.10.08.md │ ├── #39-2018.10.15.md │ ├── #4.md │ ├── #40-2018.10.22.md │ ├── #41-2018.10.29.md │ ├── #42-2018.11.05.md │ ├── #43-2018.11.12.md │ ├── #44-2018.11.19.md │ ├── #45-2018.11.26.md │ ├── #46-2018.12.03.md │ ├── #47-2018.12.10.md │ ├── #48-2018.12.17.md │ ├── #49-2018.12.24.md │ ├── #5.md │ ├── #6.md │ ├── #7.md │ ├── #8.md │ └── #9.md ├── 2019 │ ├── #50-2019.01.02.md │ ├── #51-2019.01.09.md │ ├── #52-2019.01.14.md │ ├── #53-2019.01.21.md │ ├── #54-2019.01.28.md │ ├── #55-2019.02.18.md │ ├── #56-2019.02.25.md │ ├── #57-2019.03.04.md │ ├── #58-2019.03.11.md │ ├── #59-2019.03.18.md │ ├── #60-2019.03.25.md │ ├── #61-2019.04.01.md │ ├── #62-2019.04.08.md │ ├── #63-2019.04.15.md │ ├── #64-2019.04.22.md │ ├── #65-2019.04.29.md │ ├── #66-2019.05.06.md │ ├── #67-2019.05.13.md │ ├── #68-2019.05.20.md │ ├── #69-2019.05.27.md │ ├── #70-2019.06.03.md │ ├── #71-2019.06.17.md │ ├── #72-2019.06.24.md │ ├── #73-2019.07.01.md │ ├── #74-2019.07.08.md │ ├── #75-2019.07.15.md │ ├── #76-2019.07.22.md │ ├── #77-2019.07.29.md │ ├── #78-2019.08.05.md │ ├── #79-2019.08.12.md │ ├── #80-2019.08.19.md │ ├── #81-2019.08.26.md │ ├── #82-2019.09.02.md │ ├── #83-2019.09.09.md │ ├── #84-2019.09.23.md │ ├── #85-2019.09.30.md │ ├── #86-2019.10.14.md │ ├── #87-2019.10.21.md │ ├── #88-2019.10.28.md │ ├── #89-2019.11.04.md │ ├── #90-2019.11.11.md │ ├── #91-2019.11.18.md │ ├── #92-2019.11.25.md │ ├── #93-2019.12.02.md │ ├── #94-2019.12.09.md │ ├── #95-2019.12.16.md │ ├── #96-2019.12.23.md │ └── #97-2019.12.30.md ├── 2020 │ ├── #100-2020.02.10.md │ ├── #101-2020.02.17.md │ ├── #102-2020.02.24.md │ ├── #103-2020.03.02.md │ ├── #104-2020.03.09.md │ ├── #105-2020.03.16.md │ ├── #106-2020.03.23.md │ ├── #107-2020.03.30.md │ ├── #108-2020.04.06.md │ ├── #109-2020.04.13.md │ ├── #110-2020.04.20.md │ ├── #111-2020.04.27.md │ ├── #112-2020.05.11.md │ ├── #113-2020.05.18.md │ ├── #114-2020.05.25.md │ ├── #115-2020.06.01.md │ ├── #116-2020.06.08.md │ ├── #117-2020.06.15.md │ ├── #118-2020.06.22.md │ ├── #119-2020.07.13.md │ ├── #120-2020.07.23.md │ ├── #121-2020.07.27.md │ ├── #122-2020.08.03.md │ ├── #123-2020.08.10.md │ ├── #124-2020.08.17.md │ ├── #125-2020.08.24.md │ ├── #126-2020.08.31.md │ ├── #127-2020.09.07.md │ ├── #128-2020.09.14.md │ ├── #129-2020.09.21.md │ ├── #130-2020.09.28.md │ ├── #131-2020.10.12.md │ ├── #132-2020.10.19.md │ ├── #133-2020.10.26.md │ ├── #134-2020.11.02.md │ ├── #135-2020.11.09.md │ ├── #136-2020.11.16.md │ ├── #137-2020.11.23.md │ ├── #138-2020.11.30.md │ ├── #139-2020.12.07.md │ ├── #140-2020.12.14.md │ ├── #141-2020.12.21.md │ ├── #142-2020.12.28.md │ ├── #98-2020.01.06.md │ └── #99-2020.01.13.md ├── 2021 │ ├── #143-2021.01.04.md │ ├── #144-2021.01.11.md │ ├── #145-2021.01.18.md │ ├── #146-2021.01.25.md │ ├── #147-2021.02.01.md │ ├── #148-2021.02.08.md │ ├── #149-2021.03.01.md │ ├── #150-2021.03.08.md │ ├── #151-2021.03.15.md │ ├── #152-2021.03.22.md │ ├── #153-2021.03.29.md │ ├── #154-2021.04.06.md │ ├── #155-2021.04.12.md │ ├── #156-2021.04.19.md │ ├── #157-2021.04.26.md │ ├── #158-2021.05.10.md │ ├── #159-2021.05.17.md │ ├── #160-2021.05.24.md │ ├── #161-2021.05.31.md │ ├── #162-2021.06.07.md │ ├── #163-2021.06.21.md │ ├── #164-2021.06.28.md │ ├── #165-2021.07.05.md │ ├── #166-2021.07.12.md │ ├── #167-2021.07.19.md │ ├── #168-2021.07.26.md │ ├── #169-2021.08.02.md │ ├── #170-2021.08.09.md │ ├── #171-2021.08.16.md │ ├── #172-2021.08.23.md │ ├── #173-2021.08.30.md │ ├── #174-2021.09.06.md │ ├── #175-2021.09.13.md │ ├── #176-2021.09.27.md │ ├── #177-2021.10.18.md │ ├── #178-2021.10.25.md │ ├── #179-2021.11.01.md │ ├── #180-2021.11.08.md │ ├── #181-2021.11.15.md │ ├── #182-2021.11.22.md │ ├── #183-2021.11.29.md │ ├── #184-2021.12.06.md │ ├── #185-2021.12.13.md │ ├── #186-2021.12.20.md │ └── #187-2021.12.27.md ├── 2022 │ ├── #188-2022.01.10.md │ ├── #189-2022.01.17.md │ ├── #190-2022.01.24.md │ ├── #191-2022.02.14.md │ ├── #192-2022.02.21.md │ ├── #193-2022.02.28.md │ ├── #194-2022.03.07.md │ ├── #195-2022.03.14.md │ ├── #196-2022.03.21.md │ ├── #197-2022.03.28.md │ ├── #198-2022.04.11.md │ ├── #199-2022.04.18.md │ ├── #200-2022.04.25.md │ ├── #201-2022.05.09.md │ ├── #202-2022.05.16.md │ ├── #203-2022.05.23.md │ ├── #204-2022.05.30.md │ ├── #205-2022.06.20.md │ ├── #206-2022.06.27.md │ ├── #207-2022.07.04.md │ ├── #208-2022.07.11.md │ ├── #209-2022.07.18.md │ ├── #210-2022.07.25.md │ ├── #211-2022.08.01.md │ ├── #212-2022.08.08.md │ ├── #213-2022.08.15.md │ ├── #214-2022.08.22.md │ ├── #215-2022.08.29.md │ ├── #216-2022.09.05.md │ ├── #217-2022.09.19.md │ ├── #218-2022.09.26.md │ ├── #219-2022.10.17.md │ ├── #220-2022.10.24.md │ ├── #221-2022.10.31.md │ ├── #222-2022.11.07.md │ ├── #223-2022.11.14.md │ ├── #224-2022.11.21.md │ ├── #225-2022.11.28.md │ ├── #226-2022.12.05.md │ ├── #227-2022.12.12.md │ └── #228-2022.12.19.md ├── 2023 │ ├── #229-2023.01.09.md │ ├── #230-2023.01.16.md │ ├── #231-2023.02.06.md │ ├── #232-2023.02.13.md │ ├── #233-2023.02.20.md │ ├── #234-2023.02.27.md │ ├── #235-2023.03.06.md │ ├── #236-2023.03.13.md │ ├── #237-2023.03.20.md │ ├── #238-2023.03.27.md │ ├── #239-2023.04.03.md │ ├── #240-2023.04.10.md │ ├── #241-2023.04.17.md │ ├── #242-2023.04.24.md │ ├── #243-2023.05.08.md │ ├── #244-2023.05.15.md │ ├── #245-2023.05.22.md │ ├── #246-2023.05.29.md │ ├── #247-2023.06.05.md │ ├── #248-2023.06.12.md │ ├── #249-2023.06.19.md │ ├── #250-2023.07.03.md │ ├── #251-2023.07.10.md │ ├── #252-2023.07.17.md │ ├── #253-2023.07.24.md │ ├── #254-2023.07.31.md │ ├── #255-2023.08.07.md │ ├── #256-2023.08.14.md │ ├── #257-2023.08.21.md │ ├── #258-2023.08.28.md │ ├── #259-2023.09.04.md │ ├── #260-2023.09.11.md │ ├── #261-2023.09.18.md │ ├── #262-2023.09.25.md │ ├── #263-2023.10.16.md │ ├── #264-2023.10.23.md │ ├── #265-2023.10.30.md │ ├── #266-2023.11.06.md │ ├── #267-2023.11.13.md │ ├── #268-2023.11.20.md │ ├── #269-2023.11.27.md │ ├── #270-2023.12.04.md │ ├── #271-2023.12.11.md │ ├── #272-2023.12.18.md │ └── #273-2023.12.25.md ├── 2024 │ ├── #274-2024.01.08.md │ ├── #275-2024.01.15.md │ ├── #276-2024.01.22.md │ ├── #277-2024.01.29.md │ ├── #278-2024.02.26.md │ ├── #279-2024.03.04.md │ ├── #280-2024.03.11.md │ ├── #281-2024.03.18.md │ ├── #282-2024.03.25.md │ ├── #283-2024.04.01.md │ ├── #284-2024.04.08.md │ ├── #285-2024.04.15.md │ ├── #286-2024.04.22.md │ ├── #287-2024.04.29.md │ ├── #288-2024.05.13.md │ ├── #289-2024.05.20.md │ ├── #290-2024.05.27.md │ ├── #291-2024.06.03.md │ ├── #292-2024.06.10.md │ ├── #293-2024.06.17.md │ ├── #294-2024.06.24.md │ ├── #295-2024.07.01.md │ ├── #296-2024.07.08.md │ ├── #297-2024.07.15.md │ ├── #298-2024.07.22.md │ ├── #299-2024.07.29.md │ ├── #300-2024.08.05.md │ ├── #301-2024.08.12.md │ ├── #302-2024.08.19.md │ ├── #303-2024.08.26.md │ ├── #304-2024.09.02.md │ ├── #305-2024.09.09.md │ ├── #306-2024.09.23.md │ ├── #307-2024.09.30.md │ ├── #308-2024.10.21.md │ ├── #309-2024.10.28.md │ ├── #310-2024.11.04.md │ ├── #311-2024.11.11.md │ ├── #312-2024.11.18.md │ ├── #313-2024.11.25.md │ ├── #314-2024.12.02.md │ ├── #315-2024.12.09.md │ ├── #316-2024.12.16.md │ ├── #317-2024.12.23.md │ └── #318-2024.12.30.md └── 2025 │ ├── #319-2025.01.06.md │ ├── #320-2025.01.13.md │ ├── #321-2025.01.20.md │ ├── #322-2025.02.10.md │ ├── #323-2025.02.17.md │ ├── #324-2025.02.24.md │ ├── #325-2025.03.03.md │ ├── #326-2025.03.10.md │ ├── #327-2025.03.17.md │ ├── #328-2025.03.24.md │ ├── #329-2025.03.31.md │ ├── #330-2025.04.07.md │ ├── #331-2025.04.14.md │ ├── #332-2025.04.21.md │ ├── #333-2025.04.28.md │ ├── #334-2025.05.12.md │ ├── #335-2025.05.19.md │ ├── #336-2025.05.26.md │ └── #337-2025.06.09.md └── assets ├── author ├── 100mango.png ├── BluesJiang.jpeg ├── ChinaFishNews.png ├── CooperChen.png ├── CrazyCoderShi.png ├── Damonvvong.png ├── David.png ├── DylanYang.png ├── EyreFree.png ├── GesanTung.png ├── JonyFang.png ├── Kyle-Ye.png ├── KyoLi.png ├── LeoMobileDeveloper.jpeg ├── ParsifalC.png ├── SatanWoo.png ├── ZengyiMa.png ├── aaaron7.png ├── anotheren.png ├── awhisper.png ├── barney.png ├── bq.png ├── chengzhi.png ├── iblacksun.png ├── iostalks.png ├── jiyan135960.png ├── josephchang10.png ├── kemchenj.png ├── knightsj.png ├── lacklock.png ├── linwenbang.png ├── looping.png ├── mmoaay.png ├── nianran.png ├── olddonkey.png ├── raozhizhen.png ├── tom510230.png ├── waterXu.png ├── waz0820.png ├── xiaofei86.png ├── yxztj.png ├── zangqilong198812.png ├── zoeGuo.png ├── ztlyyznf001.png └── zvving.png ├── iOSdev.jpg ├── ios-weekly-avatar-transparent.png ├── ios-weekly-avatar.png ├── ios-weekly-juejin.png ├── ios-weekly-logo.png ├── ios-weekly-wechat.png ├── ios-weekly.png ├── qrcode_for_wechat.jpg ├── release_only.png └── weekly-header ├── 247.png ├── 248.jpg ├── 249.png ├── 250.png ├── 251.png ├── 252.png ├── 253.png ├── 254.png ├── 255.png ├── 256.png ├── 257.png ├── 258.png ├── 259.png ├── 260.png ├── 261.png ├── 262.png ├── 263.png ├── 264.png ├── 265.png ├── 266.jpg ├── 267.jpg ├── 268.jpg ├── 269.jpg ├── 270.jpg ├── 271.jpg ├── 272.jpg ├── 273.jpg ├── 274.jpg ├── 275.jpg ├── 276.jpg ├── 277.jpg ├── 278.jpg ├── 279.jpg ├── 280.jpg ├── 281.jpg ├── 282.jpg ├── 283.jpg ├── 284.jpg ├── 285.jpg ├── 286.jpg ├── 287.jpg ├── 288.jpg ├── 289.jpg ├── 290.jpg ├── 291.jpg ├── 292.jpg ├── 293.jpg ├── 294.jpg ├── 295.jpg ├── 296.jpg ├── 297.jpg ├── 298.jpg ├── 299.jpg ├── 300.jpg ├── 301.jpg ├── 302.jpg ├── 303.jpg ├── 304.jpg ├── 305.jpg ├── 306.jpg ├── 307.jpg ├── 308.jpg ├── 309.jpg ├── 310.jpg ├── 311.jpg ├── 312.jpg ├── 313.jpg ├── 314.jpg ├── 315.jpg ├── 316.jpg ├── 317.jpg ├── 318.jpg ├── 319.jpg ├── 320.jpg ├── 321.jpg ├── 322.jpg ├── 323.jpg ├── 324.jpg ├── 325.jpg ├── 326.jpg ├── 327.jpg ├── 328.jpg ├── 329.jpg ├── 330.jpg ├── 331.jpg ├── 332.jpg ├── 333.jpg ├── 334.jpg ├── 335.jpg ├── 336.jpg └── 337.jpg /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lacklock@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | This document contains information and guidelines about contributing to this project. 4 | Please read it before you start participating. 5 | 6 | **Topics** 7 | 8 | * [Asking Questions](#asking-questions) 9 | * [Reporting Issues](#reporting-issues) 10 | * [Developers Certificate of Origin](#developers-certificate-of-origin) 11 | 12 | ## Asking Questions 13 | 14 | We don't use GitHub as a support forum. 15 | For any usage questions that are not specific to the project itself, 16 | please ask on [Stack Overflow](https://stackoverflow.com) instead. 17 | By doing so, you'll be more likely to quickly solve your problem, 18 | and you'll allow anyone else with the same question to find the answer. 19 | This also allows maintainers to focus on improving the project for others. 20 | 21 | ## Reporting Issues 22 | 23 | A great way to contribute to the project 24 | is to send a detailed issue when you encounter an problem. 25 | We always appreciate a well-written, thorough bug report. 26 | 27 | Check that the project issues database 28 | doesn't already include that problem or suggestion before submitting an issue. 29 | If you find a match, add a quick "+1" or "I have this problem too." 30 | Doing this helps prioritize the most common problems and requests. 31 | 32 | When reporting issues, please include the following: 33 | 34 | * The version of Xcode you're using 35 | * The version of iOS or macOS you're targeting 36 | * The full output of any stack trace or compiler error 37 | * A code snippet that reproduces the described behavior, if applicable 38 | * Any other details that would be useful in understanding the problem 39 | 40 | This information will help us review and fix your issue faster. 41 | 42 | ## Developer's Certificate of Origin 43 | 44 | By making a contribution to this project, I certify that: 45 | 46 | - (a) The contribution was created in whole or in part by me and I 47 | have the right to submit it under the open source license 48 | indicated in the file; or 49 | 50 | - (b) The contribution is based upon previous work that, to the best 51 | of my knowledge, is covered under an appropriate open source 52 | license and I have the right under that license to submit that 53 | work with modifications, whether created in whole or in part 54 | by me, under the same open source license (unless I am 55 | permitted to submit under a different license), as indicated 56 | in the file; or 57 | 58 | - (c) The contribution was provided directly to me by some other 59 | person who certified (a), (b) or (c) and I have not modified 60 | it. 61 | 62 | - (d) I understand and agree that this project and the contribution 63 | are public and that a record of the contribution (including all 64 | personal information I submit with it, including my sign-off) is 65 | maintained indefinitely and may be redistributed consistent with 66 | this project or the open source license(s) involved. 67 | 68 | --- 69 | 70 | *Some of the ideas and wording for the statements above were based on work by the [Alamofire](https://github.com/Alamofire/Alamofire/blob/master/CONTRIBUTING.md) communities. We commend them for their efforts to facilitate collaboration in their projects.* 71 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # 推荐收录 2 | 3 | ## 链接 4 | 5 | [此处替换为具体的资源地址] 6 | 7 | ## 理由 8 | 9 | [此处填写您的推荐理由] 10 | 11 | ## 推荐人信息 12 | 13 | 如果收录这个资源,我们会在点评后面说明推荐信息人。 -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/suggest_anything.md: -------------------------------------------------------------------------------- 1 | ### 意见反馈 2 | 3 | 如果有任何意见或建议也可以提交给我们,按下方对应提示填写即可,♥ 4 | 5 | #### 意见反馈(可选) 6 | 7 | [此处填写您对我们周报的意见或建议] 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /Posts/让面试官来告诉你,哪类 iOS 开发更容易被青睐?.md: -------------------------------------------------------------------------------- 1 | # 让面试官来告诉你,哪类 iOS 开发更容易被青睐? 2 | 3 | ![](https://ws1.sinaimg.cn/large/bf676845ly1g22g0mpeo0j232m1zn177.jpg) 4 | 5 | 在当下这个**金三银四**的时期,我们经常会看到「XXX 的面试准备」、「XXXX 面试心得」、「XXX 面试之路」之类的文章。但是这些都是站在**面试者**的角度出发的文章。总结了各大公司的面试流程,分享面试深度、广度。对于自己面试的表现只能从自身的表现,亦或者是从面试官的微表情中透露出来的一些动作来感知。但是我认为这些不一定准确的,只是自己的主观意识罢了~ 6 | 7 | 所以今天,我们换个角度,我们来问问看**面试官**,在我们的面试过程中,面试官们更青睐于哪类人呢?下面的回答,我期望读者们能类比一下自身,小编自己看完之后,也是深有体会💪💪💪。那么就让我们开始吧~ 8 | 9 | ## 折腾范儿_味精 10 | 蚂蚁金服会员技术部面试官,江湖俗称味精,在 Web 方面有很深的了解 11 | 12 | 1. **探寻机制原理**,不满足于只完成功能需求的。这一点侧面可以证明候选人有解决疑难杂症的优秀潜力,见识过更多优秀的代码,只停留在遇到问题再谷歌百度,最终完成功能需求的,并不是我青睐的。 13 | 2. 对于工作有自己的**主动性设计与产出**,并且能体现出**技术深度与成长**的。简单的来说如果有一天老板不给你安排任务了,不给你提明确的需求做 xxx 了,你自己能有什么样的规划思考以及对项目对自己的技术提升,这一点体现主观能动性与发现问题解决问题的潜质。 14 | 15 | ## 没有故事的卓同学 16 | 老司机周报发起人,目前是奇志科技 iOS 团队负责人 17 | 18 | 我们当下的主要业务是利用无人机采集数据,推动行业作业效率。移动端要处理:无人机的任务控制(按规定的航线、动作采集数据)、无人机的数据处理(拍到的图片、视频)。和服务器的通讯是很重要的一环,也有类似直播推无人机的图传视频流的场景。我们的产品 UI 的比重少,没有那么多页面,更多时候是针对一个需求,提出一个合理的技术方案,然后保证这个方案高质量的实现。 19 | 20 | 按照前面提到的要求,我们会要求移动端的开发人员一定要有良好的**计算机基础知识**。不是计算机专业,培训班了几个月 UI 写的溜的就完全不合适。在大的业务型公司中写了几年 UI 的也不匹配。我们要解决一个需求时,要考虑无人机硬件上的能力、飞控的能力、无人机通信上的限制、数据到 native 层后如何处理。如果计算机基础知识掌握的好,遇到我们业务上的难题就能解决的越好。所以背后还隐含了对新技术的探索、理解能力。 21 | 22 | 因为看中**新技术的探索**、**学习能力**,所以喜欢**折腾**其他端技术的程序员我们也很偏爱。为了保证移动团队可以有效的沟通,会尽量 iOS 和 Android 大的架构上保持一致。两端也都深度使用了 Rx。我们面向不同行业应用的 UI 是使用类似 RN 技术实现的,UI 构建代码是 js。因此 iOS 团队提供了接触安卓、前端的机会。如果一个程序员有兴趣,在我们这边就可以实现一个功能,三端代码一个人写。 23 | 24 | ## Tom 25 | 广州头条 EE 团队初创成员,资深面试官 26 | 27 | 1. **沟通能力**第一位,其次考察学习能力和知识深度,特别喜欢能够举一反三的候选人。 28 | 2. 有强烈的**学习自驱力**会加分,另外能够经常了解项目上下游事情的候选人也会加分。 29 | 3. 软素质部分,比较看中是否能够在相对苛刻的外部压力下找到解决方案,譬如对一个随机出现的 BUG 揪住不放,用了较多的个人业余时间赶上当前版本周期解决。 30 | 31 | > 广州头条急招各种岗位,求简历ing,小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ 32 | 33 | ## Parsifal 34 | 老司机周报负责人,微医生 iOS 团队负责人 35 | 36 | 对不同职位要求倾向性也会有一定区别。若招的是初中级或者实习生,我想基本功和学习能力是会占到比较大的比重的。而相对若招的是更深层次的人才,则对于技术深度和广度都会有更大的要求。在硬能力差不多的前提下,我谈谈在面试过程中会让我感觉眼前一亮有加分的一些表现吧。 37 | 38 | 1. 认真听题目,理解考察目的,针对性和有**条理性**地梳理思路而后开始回答。一类应聘者在面试过程中,会试图打断面试官提问做抢答,这是极不好的一个习惯。不仅会让面试官觉得你会较急躁,且不太礼貌,而且往往回答得并不是面试官真正想要问的。另一类应聘者则是回答问题并没有一个很清晰的思路,自顾自地侃侃而谈了很多,最后越来越偏离主题,反而是起到反效果。相应地,如果你能够分点有层次地答题,不仅自己不会答漏,也能让面试官轻松得 get 到你的掌握程度。 39 | 2. **气质**与团队的**气质**能够有较大地契合。每个团队都会有自己的**气质**,这会在平常工作中体现的很明显。如果你应聘的团队是较激进有活力的,对各类新技术都很热衷尝试和沉淀,而你属于较沉稳保守的,那到团队内久了就会显得格格不入。 40 | 3. 喜欢自己从事的工作,关注业内的技术和生态发展,对近期圈子里能够有一定的了解。这一点很可能会映射出你是否会持续成长。在 WWDC 期间,我往往会聊一些相关的作为破冰话题。 41 | 4. 定期有**计划**地梳理自己的知识体系。如果你有这个习惯,可以提前传到 GitHub 等地方,并在简历上体现。 42 | 5. 保持**谦逊**,不要浮夸和自以为是。遇到过太多对自己迷之自信的应聘者,但往往技术是越到深处越觉得学无止境的。 43 | 44 | ## 享耳先森 45 | 丁香园 iOS 团队负责人 46 | 47 | 1. iOS 及软件工程上有足够的硬实力。 48 | 2. 软实力方面,比较考察 **学习能力**、**主动性**,我们比较喜欢做事能够做到实时反馈的人,而不是需要其他人去推动。 49 | 3. 心态方面,我们会要求候选人 **心智成熟、心态开放**,并不太喜欢甩锅的行为,能够主动承担责任。 50 | 51 | ## Jason 52 | 即刻 iOS 团队负责人 53 | 54 | 除了专业技能、算法基本功符合岗位要求之外,我们还有一个 iOS 面试原则,不论职级高低都需要满足: 55 | 56 | 1. 真实直接,是什么说什么,绕弯子的不要。 57 | 2. 心态一定要开放,有旺盛的好奇心和想象力,不管自己 Level 是高是低,都愿意拥抱新的更好的技术和思想,**少年心气**。 58 | 3. **沟通协作**能力一定要强,只喜欢单打独斗的不要。 59 | 4. 遇到问题的时候,老从其他人身上找原因的不要。 60 | 61 | 我们认为公司氛围与个人能力都很重要。只要文化足够好,就算刚入职的时候经验不足,将来成长空间和速度也是非常可观的。 62 | 63 | ## 总结 64 | 65 | OK~我们看完了这么多大佬的话语之后是不是都有一些自己的感触呢?小编我自己作为面试官的次数并不多,就不高谈阔论了。简单几个词,总结一下本篇的言论。(如果每个单题都是20分,你给自己打几分呢?评论区可以留言哦!打💯或者超过💯的童鞋,🙄让我们膜拜一下。) 66 | 67 | 1. 探索精神 68 | 2. 心智成熟、心态开放 69 | 3. 沟通协作能力 70 | 4. 主动性 71 | 5. 强逻辑思维 72 | 73 | 最后,祝大家看完本文后都有所收获,面试顺利~😊😊😊 74 | 75 | ## 内推 76 | 77 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 78 | 79 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 80 | 81 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 82 | 83 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 -------------------------------------------------------------------------------- /Report template.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #319 | 2025-01-06 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | > 行业相关的新闻、趣事、看法 11 | 12 | ##  Developer - 设计开发加速器 13 | 14 | > 设计开发加速器相关活动 15 | 16 | ## 新手推荐 17 | 18 | > 收集一些对新手友好且质量不错的文章 19 | 20 | ## 文章 21 | 22 | > 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 23 | 24 | ## 工具 25 | 26 | > 开发过程中常用的工具,及一些新工具的介绍 27 | 28 | ## 代码 29 | 30 | > 库,代码段,开源app 31 | 32 | ## 书 33 | 34 | > 比较不错的书的推荐和书评 35 | 36 | ## 音视频 37 | 38 | > 比较不错的书的推荐和书评 39 | 40 | ## 内推 41 | 42 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 43 | 44 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 45 | 46 | ## 关注我们 47 | 48 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 49 | 50 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 51 | 52 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 53 | 54 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 55 | 56 | ## 说明 57 | 58 | 🚧 表示需某工具,🌟 表示编辑推荐 59 | 60 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 61 | -------------------------------------------------------------------------------- /Reports/2018/#10.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #10 | 2018-03-12 2 | 3 | ![ios-weekly](../assets/ios-weekly.png) 4 | 5 | 老司机 iOS 周报,只为你呈现有价值的信息。 6 | 7 | ## 新闻 8 | 9 | ### [3 月 7 日这一夜,黑客耍了所有人](https://mp.weixin.qq.com/s/z39hBMif1bQJeb4Ar_zRAw) 10 | 11 | 币圈本周最佳!虽然只是**币安 Binance 交易所**被黑,并不是 BTC 本身的缺陷,但是比较讽刺的是:币圈和链圈都在一边吹捧去中心化,一边又通过中心化的交易所炒币。真可以说是嘴上笑嘻嘻,心里 MMP... 12 | 13 | ## 文章 14 | 15 | ### [Quick Guide To Property Animators](https://useyourloaf.com/blog/quick-guide-to-property-animators/) 16 | 17 | 现在至少有三种方式来实现视图动画。从最早的 begin/commit,到 iOS 4 的 block API,以及从 iOS 10 开始的 property animators。如果你了解基于 block 的视图动画 API 但不熟悉更复杂的 property animators,这篇指南会为你介绍它们之间的异同。 18 | 19 | ### 🚧 [Designing iOS architecture: Motivation](https://medium.com/ios-os-x-development/designing-ios-architecture-motivation-e984e4ebba4a) 20 | 21 | 非常特别的一篇文章,文章在谈架构,但是文章里并不介绍具体架构。非常简洁的介绍了为什么需要设计架构,以及一个架构的设计过程应该是怎么样。 22 | 23 | ### [稀土掘金翻译计划 TensorFlow Docs 中文版](https://github.com/xitu/tensorflow-docs/tree/v1.4-zh-hans) 24 | 25 | TensorFlow Docs 是由掘金翻译计划实时维护的 TensorFlow 官方文档中文版,维护者为全球各大公司开发人员和各著名高校研究者及学生。现已完成 [TensorFlow V1.4 官方中文文档](https://github.com/xitu/tensorflow-docs/tree/v1.4-zh-hans),译者团队正在向 [TensorFlow V1.6 官方中文文档](https://github.com/xitu/tensorflow-docs)更新,掘金翻译计划欢迎大家的加入。 26 | 27 | ### [iOS 性能优化的探索](https://www.jianshu.com/p/b8346c1a4145) 28 | 29 | 文章整理了常见的 UI 性能优化的方法。但是每一点都没有深入的展开略遗憾。 30 | 31 | ### [技术面试需要掌握的基础知识整理](https://github.com/CyC2018/Interview-Notebook) 32 | 33 | 这个项目对技术面试常会涉及到的基础知识进行了搜集整理。与网上零散的文章资料相比,它更系统与全面,每部分都是作者根据自己所得所思细心整理。相信在这个招聘热季大家都能从这里得到帮助。 34 | 35 | ### [The power of sets in Swift](https://www.swiftbysundell.com/posts/the-power-of-sets-in-swift) 36 | 37 | 本文对 Swift 中 Set 的一些鲜为人知但非常强大的特性进行了举例介绍,我们可以利用这些特性在某些情况下获得性能更好或可读性更高的代码。 38 | 39 | ## 代码 40 | 41 | ### [Repeat - Modern alternative to NSTimer in Swift](https://github.com/malcommac/Repeat) 42 | 43 | Swift 中的 Timer 需要提供 @objc 修饰的方法,这让人并不愉快,更别提 Timer 本身的诸多问题, 如 [强引用 target](https://github.com/100mango/zen/blob/master/iOS%E5%A4%AF%E5%AE%9E%EF%BC%9AARC%E6%97%B6%E4%BB%A3%E7%9A%84%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/%23iOS%E5%A4%AF%E5%AE%9E%EF%BC%9AARC%E6%97%B6%E4%BB%A3%E7%9A%84%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86.md),依赖 Runloop,不支持闭包等。 44 | 45 | 你需要一个更为优雅的计时器,[Repeat](https://github.com/malcommac/Repeat) 基于 GCD 的 DispatchSource,实现一个 Swift 风格的轻量级计时器。 46 | 47 | 原理:DispatchSource 用于监听系统底层事件的发生,DispatchSourceTimer 会创建 Timer 事件对应的 dispatch source,然后给这个 source 指定一个闭包,指定一个 Dispatch Queue。当 source 监听到 Timer 事件时,就会将该闭包自动加到 queue 中执行。 48 | 49 | ### [Resumable Assert](https://github.com/google/resumable-assert?utm_campaign=Revue%20newsletter&utm_medium=Newsletter&utm_source=AppCoda%20Weekly) 50 | 51 | 写代码的过程中或多或少都会遇到一些地方 `assert` 或者 `fatalError` 了,但我们却无法在当下马上修复它,这个时候可能我们只能先注释掉这些防御代码,重新编译运行,恢复到一个能继续当前任务的状态。 52 | 53 | 但我们真的无能为力吗?Google 团队给我们带来了这么一个工具,就像它的名字 Resumable Assert —— **可被恢复的断言**,中断在断言的时候,我们可以在 debugger 里恢复运行,不需要修改任何代码。并且如果你是使用 Swift 的话,可以借助 Swift 的 Module 设计,直接在 module 内重写掉标准库里的 `assert` 方法,无需改动一行代码就可以把项目里的 `assert` 都变成可恢复的 😈。 54 | 55 | ## 书 56 | 57 | ### [Continuous Delivery for Mobile with Fastlane](https://doronkatz.com/fastlane) 58 | 59 | 你还在手动打包、上传 App 吗?是时候试试 `Fastlane` 了。本书将带你了解 `Fastlane` 的方方面面:如证书管理、TestFlight 管理、如何与现有的 `CI` 系统结合。另外,`Fastlane` 的 [官方文档](https://docs.fastlane.tools) 也是非常好的快速上手资源。 60 | 61 | ## 本期编辑 62 | 63 | [@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@mmoaay](https://weibo.com/u/1302422271),[@享耳先森](https://github.com/iblacksun),[@EyreFree](https://weibo.com/eyrefree777),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang) 64 | 65 | ## 说明 66 | 67 | 🚧 表示需翻墙,🌟 表示店长推荐 68 | -------------------------------------------------------------------------------- /Reports/2020/#109-2020.04.13.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #109 | 2020.04.13 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐎 [Using Closures to initialize properties in Swift](https://www.donnywals.com/using-closures-to-initialize-properties-in-swift/) 11 | 12 | [@anotheren](https://github.com/anotheren):本文介绍了如何使用闭包来初始化存储属性,特别是使用 `lazy var` 来延迟初始化,你甚至可以在闭包中“安全”地使用 `self`。闭包将原本分散在程序各处的代码合理地组合到一起,推荐尝试。 13 | 14 | [@zvving](https://twitter.com/zvving):值得注意的是,`lazy var` 这种方式并不能做到 thread-safe,使用时有必要考虑到这点。更多的 Swift 资源竞争相关知识可以再阅读下 92 期周报推荐的 [Thread Sanitizer explained: Data Races in Swift](https://github.com/SwiftOldDriver/iOS-Weekly/blob/f457fc59fdbc7fa4df4325bd30a1dbffa8f9626a/Reports/2019/%2392-2019.11.25.md#-thread-sanitizer-explained-data-races-in-swift) 一文。 15 | 16 | ### 🐎 [tintColor](https://sarunw.com/posts/tintcolor/) 17 | 18 | [@水水](https://www.xuyanlan.com): tintColor 是 UIView 中返回颜色的变量,如果未定义这个颜色,则返回系统的默认色(亮蓝色),就比如你不定义一个按钮的文字颜色,则你会看到默认的蓝色。并且通过将 tintColor 设置到视图控制器的视图上,您可以轻松更改应用程序的外观。更多关于 tintColor 的使用方法具体可以查看文章~ 19 | 20 | ## 文章 21 | 22 | ### 🌟 🐢 [揭秘 APM iOS SDK 的核心技术](https://mp.weixin.qq.com/s/oChCjP_S1NVsBeh_sui4PQ) 23 | 24 | [@J_Knight_](https://github.com/knightsj):本文参考了听云、OneAPM 和 Firebase Performance Monitoring 等 APM SDK,并结合代码分享了几项 APM 核心技术的实现: 25 | 26 | 1. 页面渲染时间监控 27 | 2. 启动时间监控 28 | 3. 网络监控 29 | 1. NSURLSession(NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask 的 所有API) 30 | 2. 响应时间(发送请求开始到服务端的相应到达客户端的时间间隔) 31 | 32 | 具体的实现方式可以参考文中的详细代码,对我们自己实现这些监控项目会有帮助。 33 | 34 | ### 🐕 [看完这一篇,再也不用担心 Git 的“黑魔法”](https://mp.weixin.qq.com/s/wWgapBH1YRxLuf2CuZhKBw) 35 | 36 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):标题起的有点魔幻,其实本文算是对 Git 的一些基本命令做了一个粗略的概述,目的是抛砖引玉,让大家对 Git 有一个基本的认识。大家可以作为参考以便使用时查阅。 37 | 38 | ### 🐕 [Understanding Swift's ObjectIdentifier](https://swiftrocks.com/understanding-swifts-objectidentifier) 39 | 40 | [@Damonwong](https://github.com/Damonvvong):ObjectIdentifier 是 Swift 中一个比较冷门的类型。这里的冷门并不是指作用不大,而是日常使用不多。在 Swift 内部,ObjectIdentifier 承载着重要的作用,是运算符 === 实现的根本。也可以作为 metatypes 相互比较的工具。(默认的 metatypes 不遵循 Hashable)。这篇文章主要是稍微简单的介绍了一下 ObjectIdentifier 是什么,ObjectIdentifier 的原理以及如何使用 ObjectIdentifier 来提高我们 App 的性能。 41 | 42 | ### 🐕 [Configuring the Main Thread Checker](https://bryce.co/main-thread-checker-configuration/) 43 | 44 | [@老峰](https://github.com/GesanTung):本文是作者关于 Main Thread Checker 系列的第一篇,详细讲解了 Main Thread Checker 配置项如 MTC_MAX_HIT_COUNT(Main Thread Checker 停止之前,从后台线程调用给定方法的次数)等,另一篇着重讲 Main Thread Checker 实现原理,感兴趣的读者可以进一步研究。 45 | 46 | ### 🐎 [探索?WhatsApp应用名称中的隐藏符号](https://mp.weixin.qq.com/s/192iBBMtOmss4Yo-_3x_Fw) 47 | 48 | [@五子棋](https://github.com/satanwoo):本文是作者在一次偶然研究过程中发现一种特殊的字符,可以确保在复杂的从右至左的过程中保持名称显示的正确性。很简短的一篇文章,但是却很有趣,建议一读。 49 | 50 | ## 代码 51 | 52 | ### [Thrio](https://github.com/hellobike/thrio) 53 | 54 | [@CrazyCoderShi](https://github.com/CrazyCoderShi):flutter_boost 已经是 Flutter 混合开发体系一个有着举足轻重的框架了,但目前社区里似乎除了 flutter_boost 并没有其他可替代方案,最近哈啰出行团队开源了自家的 Flutter 混合开发框架 [Thrio](https://github.com/hellobike/thrio),更加轻量,入侵性更小,也不失为一个不错的选择。搭配[这篇](https://mp.weixin.qq.com/s/6PMjjF7Jqx1WnJWWRpRRyA)一起食用更佳。 55 | 56 | ## 内推 57 | 58 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 59 | 60 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 61 | 62 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 63 | 64 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 65 | 66 | ## 关注我们 67 | 68 | 我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 69 | 70 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 71 | 72 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 73 | 74 | ## 说明 75 | 76 | 🚧 表示需翻墙,🌟 表示编辑推荐 77 | 78 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 79 | -------------------------------------------------------------------------------- /Reports/2020/#115-2020.06.01.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #115 | 2020-06-01 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [LLBuild2 开发工作正式启动](https://forums.swift.org/t/llbuild2/36896) 11 | 12 | [@四娘](https://kemchenj.github.io/):LLBuild2 开发工作正式启动: 13 | 14 | - 整理 Build System,SPM,swift-driver 和 swift 编译器的职责和交互,优化整体编译架构。 15 | - 接入 Bazel 的 Remote Execution API,改造 SPM,探索分布式编译和缓存。 16 | 17 | ## 新手推荐 18 | 19 | ### 🐕 [An In-Depth Look at Blur Effect Materials on iOS](https://pspdfkit.com/blog/2020/blur-effect-materials-on-ios/) 20 | 21 | [@老峰](https://github.com/gesantung):本文以实例的形式深入详细的介绍了如何在 iOS 中实现 Blur Effect (毛玻璃模糊)效果,包括 Blur Effect Styles 各种样式在深色模式下的不同呈现,以及 Vibrancy Effect Styles 文本内容在模糊效果下的不同样式,具体参见[原文](https://pspdfkit.com/blog/2020/blur-effect-materials-on-ios/)。 22 | 23 | ## 文章 24 | 25 | ### 🐢 [网易支付-高性能NEJFlutter小程序动态化架构实践](https://www.jianshu.com/p/be48a3dc80fa) 26 | 27 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):NEJFlutter 是由网易支付出品并还在持续打磨的在 Flutter 小程序动态化方向上尝试的一套技术解决方案。自 Flutter 问世以来, 以毫秒级的热重载、丰富的可定制 Widget、难以置信的UI渲染能力、原生级的UI体验等特性迅速风靡。但尽管其渲染性能优异、跨端一致性强,但依然没有解决传统移动端开发中的痛点-无法动态化(热更新)。网易支付团队的动态化方案,在参考 MXFlutter 后,保留 了Flutter 作为视图层优秀的特性(高性能/高一致性/高能效)加上动态脚本语言作为逻辑层,来实现整套方案的动态化。目前该方案还在灰度阶段,广大开发者可以共同完善这个项目并加以使用。 28 | 29 | ### 🐕 [一个十年 iPhone 使用者的「重新体验 iPhone」之旅](https://imtx.me/blog/the-journey-of-reexperiencing-the-iphone/) 30 | 31 | [@张嘉夫](https://github.com/josephchang10):作者图拉鼎在这篇文章中总结了十年来围绕着 iPhone 体验的变化,从单独使用 iPhone 到现在使用 iPhone + Apple Watch + AirPods Pro 的复合全方面体验,具体包括无缝的设备迁移体验、无法抗拒的大屏体验、通勤路上的沉浸世界、双卡双待带来的双倍保险、Hand-free 的居家小能手 Siri、移动设备运动史、从「通讯设备」到「健康助理」、让随手拍变成专业拍、解锁 MacBook 等方面。作者认为这些体验构成了一个个生动的生活场景,让生活变得更加方便,并且相信未来还会变得更加的美好和愉快。 32 | 33 | ### 🐕 [[iOS]iOS11.0~13.5全系列设备越狱教程](https://mp.weixin.qq.com/s/0JuTk_iQCeYKjV3kIZMhHg) 34 | 35 | [@红纸](https://github.com/nianran):unc0ver 越狱团队在近期发布了最新的越狱工具(版本号:5.x),支持 iOS 11.0~13.5 版本的所有设备(包括最新的 iPhone 11、iPhone SE2 等),本文讲解了具体操作方法。 36 | 近期[飘云阁](https://www.chinapyg.com/)出了《iOS应用逆向与安全之道》一书也值得大家一读,书中基于实战讲解当下的 iOS 逆向技术。 37 | 38 | ### 🐕 [苹果强制要求更换启动方式的解决方案](https://mp.weixin.qq.com/s/mdReGqt5E7T8VWC2q7ImKw) 39 | 40 | [@享耳先森](https://github.com/iblacksun):[苹果要求在 6 月 30 日以后,所有的 App 必须使用 `storyboard` 作为 App 的启动图](https://developer.apple.com/news/?id=03262020b),本文介绍了 `LaunchImage` 切换到 `LaunchScreen.storyboard` 的一些常见问题,特别是黑屏问题,建议阅读。 41 | 42 | ### 🐕 [A Deep Dive into the Flutter Animations package](https://medium.com/flutter-nyc/a-deep-dive-into-the-flutter-animations-package-3e26b10c43c1) 43 | 44 | [@CrazyCoderShi](https://github.com/CrazyCoderShi):今年二月份 Google 官方宣布 [animations](https://pub.dev/packages/animations) 作为 Flutter 中 [Material Design](https://material.io/design/motion/the-motion-system.html) 的动效系统。 [animations](https://pub.dev/packages/animations) 能够实现多种酷炫的动效,视图转换、共享轴动效、淡入淡出等,本文结合 [animations package](https://pub.dev/packages/animations) 中的几个主流动效,详细讲解 [animations](https://pub.dev/packages/animations) 的用法, 强烈推荐👍 45 | 46 | ## 代码 47 | 48 | ### 🐎 [LayoutKit](https://github.com/linkedin/LayoutKit) 49 | [@zvving](https://github.com/zvving):LinkedIn 出品的布局库,在类似 FlexBox 布局语法的基础上提供接近手写 frame 的性能,支持异步线程计算布局和结果缓存。 50 | 51 | 需要留意的是:LayoutKit 在布局写法及[动画处理](http://layoutkit.org/animations/)上与 Autolayout 有较大区别。推荐对布局性能要求较高的朋友选用。 52 | 53 | ## 内推 54 | 55 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 56 | 57 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 58 | 59 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 60 | 61 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 62 | 63 | ## 关注我们 64 | 65 | 我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 66 | 67 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 68 | 69 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 70 | 71 | ## 说明 72 | 73 | 🚧 表示需某工具,🌟 表示编辑推荐 74 | 75 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 76 | -------------------------------------------------------------------------------- /Reports/2020/#140-2020.12.14.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #140 | 2020-12-14 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## WWDC20 9 | 10 | 本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! 11 | 12 | - [iOS 稳定性:如何在开发中规避安全风险](https://mp.weixin.qq.com/s/Khmpba8XBxbcf6Cq7zc5ZQ) 13 | - [WKWebView 新变化:发掘 WKWebView 的神奇妙用](https://mp.weixin.qq.com/s/NcMo6uStNrdLJvVGfL1TNw) 14 | 15 | ### [App 内购买项目现已支持「家人共享」功能](https://developer.apple.com/cn/news/?id=4zbvn7u9) 16 | 17 | [@享耳先森](https://github.com/iblacksun):现在,开发者可以为自动续期订阅和非消耗型内购买项目启用「家庭共享」功能,从而允许用户与最多 5 位其他家庭成员共享购买内容。 18 | 19 | ## 文章 20 | 21 | ### 🌟🚧🐕 [Uber 工程师亲述使用 Swift 重写 App 的(惨痛)经历](https://threadreaderapp.com/thread/1336890442768547845.html) 22 | 23 | [@四娘](https://kemchenj.github.io/):事情起源于 2016 年,那年 Trump 还不是总统,TK 还没有爆出丑闻,Uber 还在飞速增长,App 的架构也逐渐变得复杂和脆弱,由此产生的 Bug 让工程师团队疲于奔命,最终他们决定重写 App 的架构。 24 | 25 | 在 iOS 端,他们做了一个最“灾难性”的决定:**全面使用 Swift 进行重写**。当时的 Swift 还是 2.x 版本,Uber 的项目在那时敲下一段语句需要等 45 秒才会出现代码补齐,除此之外还有编译速度,启动速度和二进制大小的问题,过程中他们用了非常多的 hacky 的手段去处理,例如 struct 全部改成 class,编译产物重链接,编译 pass 重排等等。 26 | 27 | 希望大家看完这段经历之后可以对技术选型有更深刻的理解。 28 | 29 | > 中文译版:[我在Uber亲历的最严重的工程灾难](https://mp.weixin.qq.com/s/T1RqYrCTOpQvkWdunoxqww) 30 | 31 | ### 🌟🐕 [杀不掉的 App——CVE-2018-4340](https://mp.weixin.qq.com/s/tnupXwfR5EDhZif7t9vR1w) 32 | 33 | [@Leo](https://github.com/leomobiledeveloper):作者在 2018 年给 iOS 和 macOS 报了一个 WebKit 沙箱逃逸漏洞 CVE-2018-4310,苹果先后在 macOS 和 iOS13上修复了这个漏洞。本文详细讲述了这个漏洞的原理,以及如何在 iOS 上做一个杀不掉的 App,是一篇 iOS/macOS 上安全相关的高质量文章。 34 | 35 | ### 🌟🐕 [iOS Synchronized 底层分析](https://juejin.cn/post/6903421773232996365) 36 | 37 | [@Damien](https://github.com/ZengyiMa):Synchronized 是 iOS 开发中最常用的几种锁之一,想知道 Synchronize 的底层实现吗?本文会从 4 个具体问题出发,结合底层源码一步步为你揭开 Synchronize 的面纱,对想深挖的 iOS 底层开发者值得一读。 38 | 39 | > 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 40 | 41 | ### 🐕 [My SwiftUI Pain: Creating Tappable Links in Text](https://medium.com/better-programming/swiftui-pain-links-in-text-b31319783c9e) 42 | 43 | [@EyreFree](https://github.com/EyreFree):SwiftUI 是苹果最新推出的声明式 UI 开发框架,借助它你可以在所有 Apple 平台上构建用户界面,很多开发者已经开始在个人项目甚至企业项目中使用这一技术。它很酷,但毕竟刚刚起步,很快一些开发者便会碰到一些坑或者问题,比如本文作者遇到的:如何优雅地在一段文本中给某些词语添加点击事件。作者分享了自己如何通过一步步的尝试最终得到了自己想要的效果,虽然最终效果看起来还不错,但他直言使用传统的 UIKit 与 AppKit 也许更方便,对 SwiftUI 感兴趣的朋友推荐一读。 44 | 45 | ### 🐎 [Xcode 12.3 盘点](https://mp.weixin.qq.com/s/F_47HZZn74Jjd1q99WDCHA) 46 | 47 | [@J_Knight_](https://github.com/knightsj):本文介绍了 Xcode 12.3 RC 版本解决的关于 xcodebuild,macOS 上的键鼠响应速度,文档查看器,Interface Builder,模拟器和 Swift 的几个问题。 48 | 49 | ## 工具 50 | 51 | ### [lowmad](https://github.com/bangerang/lowmad) 52 | 53 | [@老峰](https://github.com/GesanTung): 在开发调试中我们经常会使用 LLDB 命令 Debug,有时也有自定义 LLDB 命令的需求。lowmad 就是用于管理和生成 LLDB 脚本的命令行工具,它提供了简洁易用的命令来生成或安装脚本命令,另外作者开源了 [lldb_commands](https://github.com/bangerang/lldb_commands) 自定义 LLDB 命令,如 find_label、color、nudge 等,感兴趣的读者不妨来研究一哈。 54 | 55 | ## 赞助者 56 | 57 | 虚位以待.. 58 | 59 | **非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** 60 | 61 | ## 内推 62 | 63 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 64 | 65 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 66 | 67 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 68 | 69 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 70 | 71 | ## 关注我们 72 | 73 | 我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 74 | 75 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 76 | 77 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 78 | 79 | ## 说明 80 | 81 | 🚧 表示需某工具,🌟 表示编辑推荐 82 | 83 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 84 | -------------------------------------------------------------------------------- /Reports/2021/#155-2021.04.12.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #155 | 2021-04-12 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🌟 🐕 [Introducing Swift Collections](https://swift.org/blog/swift-collections/) 11 | 12 | [@EyreFree](https://github.com/EyreFree):上周,Swift 官方发布了一个新的开源库 [Swift Collections](https://github.com/apple/swift-collections),它专注于扩展可用的 Swift 数据结构集。我们都知道目前 Swift 标准库实现了三种最基本的通用数据结构:数组、集合和字典,但很多时候为了更高效地解决问题,开发者们往往需要借助一些其他的数据结构。现在官方已经注意到了这一点,通过提供 `Collections` 库来让开发者们能够花费尽可能少的精力来编写更快、更可靠的程序,它的初始版本包含了三种最常见的数据结构:双端队列 Deque、有序集合 OrderedSet 和有序字典 OrderedDictionary。同时官方也给出了贡献代码的标准,感兴趣的同学赶紧来看看。 13 | 14 | ### 🌟 🐕 [iOS 恢复调用栈(适配 iOS 14)](https://iosre.com/t/ios-ios14/19332) 15 | 16 | [@Leo](https://github.com/leomobiledeveloper):逆向的时候,如果调用栈是符号化的能大幅提高效率。作者详细的介绍了在 iOS 14 上如何一步步获取符号信息,最后对 Mach-O Patch 来恢复符号。除了对逆向很有用,文章里涉及到的底层知识也非常推荐阅读。 17 | 18 | ### 🌟 🐕 [clang 源码导读(8):词法分析和预处理指令](https://mp.weixin.qq.com/s/zzDS0mnNSyuRwpdcUR6obg) 19 | 20 | [@JonyFang](https://github.com/JonyFang):我们知道 `clangLex` 主要负责**词法分析**和**预处理**,用于处理宏、令牌和 pragma 构造。在本文中,作者通过实际的例子对 `clangLex` 的**词法分析**和**预处理指令**相关的流程进行了梳理和总结。为了帮助读者更直观的理解 `clangLex`,作者一并提供了一份对应的预处理流程图。 21 | 22 | ### 🌟 🐢 [看不懂学不会没有用的计算几何](https://juejin.cn/collection/6913090306690777102) 23 | 24 | [@Parsifal](https://github.com/ParsifalC):做图形视觉相关开发的朋友一定离不开计算几何,这个系列是用 Swift 为我们讲解常用的计算几何场景,图文并茂,对初涉视觉方向的同学会有很大帮助。 25 | 26 | > 由 [XanderXu](https://github.com/XanderXu) 自荐,另外他编写着同名的小专栏 [ARKit 与计算几何](https://xiaozhuanlan.com/computationalgeometry),所有内容均会在小专栏上首发。 27 | 28 | ### 🐕 [从 Objective-C 和 Swift 看字典的性能优化(1)](https://mp.weixin.qq.com/s?__biz=MzAxMzk0OTg5MQ==&mid=2247485326&idx=1&sn=5b4dc0528da22b90a701fb249c2b4f44&chksm=9b9b8922acec00341388a8a686c3bb83475f1de338925b8c35957b7fc45ba38a3d32051d2dd1&scene=178&cur_album_id=1742555951460597762#rd) 29 | 30 | [@AidenRao](https://weibo.com/AidenRao):本系列文章会通过分析系统库汇编的方式,研究 Dictionary 底层相关的知识。 31 | 32 | 本文主要分享了 NSDictionary 的两个子类:__NSPlaceholderDictionary(占位的类型,通常只出现在崩溃日志中) 和 __NSDictionaryI (存有多个键值对的不可变字典) 的详细构造过程。 33 | 34 | ### 🐎 [Exploring some of the lesser-known, built-in Formatter types](https://www.swiftbysundell.com/articles/exploring-some-of-the-lesser-known-formatter-types/) 35 | 36 | [@享耳先森](https://github.com/iblacksun):开发者们对常用的 `NumberFormatter` 和 `DateFormatter` 可能比较熟悉,本文介绍了 Foundation 库里其他好用的 Formatter,如 `PersonNameComponentsFormatter` `CNPostalAddressFormatter` `RelativeDateTimeFormatter` 等。 37 | 38 | ### 🐎 [DWARF文件初探——提取轻量符号表](https://mp.weixin.qq.com/s/s8iwQLNtla5nxF_Tmj2wJg) 39 | 40 | [@红纸](https://github.com/nianran):本文作者从实践出发,简单剖析了 **DWARF** 文件的文件组成。通过 **dwarfdump --debug-info** 命令可以获取到函数的文件名、函数名、函数起始地址、函数终止地址,再利用 **dwarfdump --debug-line** 获取到行信息后,可以查看当前这个行的起始地址位于同文件下那个函数的指令区间内,即可得知函数名。 41 | 42 | > 推荐人:[pilaf-king](https://github.com/pilaf-king) 43 | 44 | ## 代码 45 | 46 | ### [EmbeddedScrollView](https://github.com/623637646/EmbeddedScrollView) 47 | 48 | [@老峰](https://github.com/gesantung):开发中会有多 ScrollView 嵌套滚动这样的需求,作者将这一实现进行了封装,提供了简单易用的 API, 一行代码解决竖直嵌套滚动问题,手势无冲突,动画完美衔接,有类似需求的同学可以借鉴参考。 49 | 50 | > 推荐人:[623637646](https://github.com/623637646) 51 | 52 | ## 赞助者 53 | 54 | 虚位以待.. 55 | 56 | **非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** 57 | 58 | ## 内推 59 | 60 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 61 | 62 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 63 | 64 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 65 | 66 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 67 | 68 | ## 关注我们 69 | 70 | 我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 71 | 72 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 73 | 74 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 75 | 76 | ## 说明 77 | 78 | 🚧 表示需某工具,🌟 表示编辑推荐 79 | 80 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 81 | -------------------------------------------------------------------------------- /Reports/2022/#203-2022.05.23.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #203 | 2022-05-23 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [《WWDC22 内参》作者招募 &《WWDC21 内参》免费领取](https://mp.weixin.qq.com/s/W-15I-lTAPKzI6USw3nuuQ) 11 | 12 | 《WWDC22 内参》作者招募工作正式开始,请感兴趣的朋友点击上方链接参与报名,报名截止时间为 5 月 30 号。 13 | 14 | 去年我们第一次公开招募了一些新的同学参与进来,同时也引入了审核机制,最终交付了一份还算满意的答卷。103 篇文章、2810 份订阅、几十万的阅读量,这些数据都要比往年要好,非常感谢大家对老司机技术的支持和信任。**《WWDC21 内参》也已经可以免费领取,在老司机技术周报公众号中回复「2022」即可获取链接。** 15 | 16 | ##  Developer - 设计开发加速器 17 | 18 | ### [设计高效的 UI 测试](https://developer.apple.com/cn/accelerator/) 19 | 20 | 2022 年 5 月 31 日(报名截止 5 月 16 日) 21 | 22 | 了解如何设计测试,来帮助你发现和诊断最棘手的漏洞。我们将解释如何使用 XCTest 改进您的自动化测试,以找到代码中的隐忧,以及如何准备测试以应对失败。从而更轻松地对问题进行分类,以便您可以快速解决问题,并修复错误。理解中断,学习如何预测 App 的潜在中断、创建智能测试以识别它们。通过使用 UI 中断处理,构建更好的测试,管理预期的警报。 23 | 24 | ![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) 25 | 26 | ## 文章 27 | 28 | ### [Dutter | 钉钉 Flutter 跨四端方案设计与技术实践](https://mp.weixin.qq.com/s/JyfwrfsWplHhkColYLhBpg?from=singlemessage&isappinstalled=0&scene=1&clicktime=1652443237&enterid=1652443237) 29 | 30 | [@老峰](https://github.com/gesantung):Dutter 即 DingTalk Flutter,是钉钉内基于 Flutter 构建的跨四端研发框架,本文主要包含以下内容: 31 | - 整体架构: Dutter Runtime、Dutter Dev Kit、Dutter OPS Kit; 32 | - 数据通信包括:Channel、Dutter FFI; 33 | - 消息总线; 34 | - 模块化; 35 | - 容器化; 36 | - 组件库:dingui_flutter 、dingtalk_uikit; 37 | - 最佳实践以及部分 FlutterEngine 层面的问题定位等。 38 | 39 | ### 🐕 [Scripting in Swift: Git Hooks](https://www.polpiella.dev/scripting-in-swift-git-hooks) 40 | 41 | [@享耳先森](https://github.com/iblacksun):Swift 除了用于 App 还可以干什么?本文作者使用 Git Hooks 结合 Swift `Command Line Tool` 解决真实工作场景中遇到的问题,如果你也有类似需求又不熟悉其他脚本语言,Swift 是很好的解决方案。 42 | 43 | ### 🐕 [京东 App MCube 动态化实践](https://mp.weixin.qq.com/s/kjYRo2OcmWCoUBTdsAKrCw) 44 | 45 | [xuyafei](https://github.com/xiaofei86):在京东 App 业务高速发展的过程中,为了使更快的需求响应速度与研发人力和稳定性需求之间达到平衡,京东自研了一套原生的“动态化+跨端”框架 MCube。本文对其方案进行了简单介绍,其通过三方库 Yoga 作为其布局引擎;通过 XML 作为 DSL 描述原生控件;通过协议层对接各个可插拔组件。另外还有其容器分层架构的设计、配套管理平台和开发套件等介绍,感兴趣的同学可以阅读原文了解。 46 | 47 | ## 代码 48 | 49 | ### [Euclid: a Swift library for creating and manipulating 3D geometry](https://github.com/nicklockwood/Euclid#example) 50 | 51 | [@莲叔](https://aaaron7.github.io):这是一个能让你非常方便创建和操作各种基础3D模型的代码库,并且可以非常方便的和 SceneKit 相关的场景进行整合。传统的方法中,要创建三维模型然后添加贴图,往往都需要编写上百行 OpenGLES 的代码才能实现,而通过 Euclid,创建模型就如同创建一个普通的 View 那样简单,感兴趣的朋友可以看一下作者开发的一个 macOS App:[ShapeScript](https://apps.apple.com/app/id1441135869), 可以通过文本描述的方法创建三维模型,可以说这个开源的组件就是这个 App 的SDK版。应该有非常多有趣的功能可以实现。 52 | 53 | ### [Runestone](https://github.com/simonbs/Runestone) 54 | 55 | Runestone 是一个高效易用的代码编辑器库,最大的亮点是: 56 | 57 | - 使用原生技术实现,不需要依赖于 WebView 58 | - 使用 TreeSitter 作为 Parser 后端,可以高效地进行增量解析,兼容大部分主流编程语言 59 | - 借鉴了 AvalonEdit 的 Line Management 60 | 61 | ## 摸鱼周报 62 | 63 | [@摸鱼周报 #53](https://mp.weixin.qq.com/s/5chb-a9u7VMdLis1FG6B6Q):第 53 期摸鱼周报来了,一起来看下本期概要: 64 | 65 | * 话题:远程工作正在成为趋势 66 | * 面试模块:CRC 实践应用:理论推导 67 | * 优秀博客:App Extension 68 | * 学习资料:一个大学生的学习计划 69 | * 开发工具:适用于 `macOS` 的现代媒体播放器,`IINA` 由开源媒体播放器 `mpv` 提供支持,几乎可以播放您拥有的所有媒体文件。 70 | 71 | ## 内推 72 | 73 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 74 | 75 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 76 | 77 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 78 | 79 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 80 | 81 | ## 关注我们 82 | 83 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 84 | 85 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 86 | 87 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 88 | 89 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 90 | 91 | ## 说明 92 | 93 | 🚧 表示需某工具,🌟 表示编辑推荐 94 | 95 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 96 | -------------------------------------------------------------------------------- /Reports/2022/#204-2022.05.30.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #204 | 2022-05-30 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [帐户删除审核条例将在 6 月 30 日开始生效](https://developer.apple.com/cn/news/?id=12m75xbj) 11 | 12 | 从 2022 年 6 月 30 日开始,支持创建账户的 App 必须同时支持账户删除功能,这项要求已经加入到了审核条例([《App Store 审核指南》第 5.1.1(v)](https://developer.apple.com/cn/app-store/review/guidelines/#5.1.1v))当中,具体详见原文链接,各位开发者务必提前做好准备。 13 | 14 | ### [码上就位 - WWDC 开发者活动](https://developer.apple.com/cn/news/?id=qnx0slc5) 15 | 16 | WWDC 开发者活动陆续在官网放出,今年依旧会和往年一样有 Keynote、Sessions、Labs、Digital Lounges 等富有特色的活动,大家可以根据自己的兴趣去参加不同的活动。此外,老司机技术也和 SwiftGG、T 沙龙一起在筹备 「WWDC.playground」的线上活动,马上会开启报名,大家可以期待和关注一下。 17 | 18 | ## 文章 19 | 20 | ### 🌟 🐢 [“Stop” using state management libraries](https://medium.com/flutter-community/stop-using-state-management-libraries-48a81ed7979d) 21 | 22 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): 在 Flutter 项目中状态管理是必须要解决的问题,行业内也有各种解决方案,例如: GetX, Provider, MobX, BLoc 等,但在其下更应该思考的是是否有必要?本文标题党一把,从其需求根本上讨论使用的必要性,非常推荐小白细读. 23 | 24 | ### 🐕 [【Hummer Flutter引擎】让Flutter绽放得更美 - 包体积优化之道](https://mp.weixin.qq.com/s/OnAnOAX1K5TyHbuUjV3LEg) 25 | 26 | [@极速男孩](https://github.com/ztlyyznf001): Flutter 的包体积一直是个让开发者头疼的问题。 本文主要介绍了 Hummer 引擎是如何通过引擎的优化和精简,分包动态化技术和资源的优化来完成对包体积缩减。并且介绍了监控和动态化平台的落地。 27 | 28 | ### 🐎 [主流图片加载库所使用的预解码究竟干了什么](https://dreampiggy.com/2019/01/18/%E4%B8%BB%E6%B5%81%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E9%A2%84%E8%A7%A3%E7%A0%81%E7%A9%B6%E7%AB%9F%E5%B9%B2%E4%BA%86%E4%BB%80%E4%B9%88/) 29 | 30 | [@J_Knight_](https://github.com/knightsj):本文介绍了 Image/IO 的惰性解码流程,以及Force Decode这套流程它所解决的问题,以及优缺点。其中,着重介绍了 WebP 这一新兴的图片压缩格式以及它的优缺点。 31 | 32 | ## 代码 33 | 34 | ### 🐕 [YYJSON 0.5.0 Released](https://github.com/ibireme/yyjson/releases/tag/0.5.0) 35 | 36 | [@享耳先森](https://github.com/iblacksun) YYJSON 是用 C 写的 JSON 解析库,以性能著称,近日发布了 0.5.0 版,有许多新特性与改进。 37 | 38 | ### [unxip: A fast Xcode unarchiver](https://github.com/saagarjha/unxip) 39 | 40 | 解压比系统自带的 xip 快 2-3 倍的一款工具,通过合理的流程设计让任务尽量并行化,内部使用 Swift Concurrency 驱动。 41 | 42 | 代码逻辑十分精简,只有 500+ 行,并且作者在 README 里有详细的设计说明,对 Concurrency 的使用也很有参考价值,非常值得仔细品味。 43 | 44 | ## 工具 45 | 46 | ### [Fig CLI](https://fig.io) 47 | 48 | [@Jimq](https:://github.com/waz0820):为你的终端添加类似 IDE 的自动补全功能,特色说明: 49 | 50 | - 将语法着色,语法提示,自动填充,自带注释,历史记忆这些基本功能有机融合在一起,产生一种奇妙的终端操作体验。 51 | - 不需要新的终端 App,只为你现有的终端或者 shell 作扩展,eg. 系统 terminal,iTerm, VSCode 内置的 terminal,bash,zsh,fish。 52 | - 支持 300 多种 CLI 工具,eg. cd, git, docker, npm, yarn, brew, kubectl, aws,可以做到 3 分钟为自己的 CLI 工具或者脚本添加自动补全功能。 53 | - 全键盘操作,快捷键方便高效。 54 | - 保护隐私,不跟踪敏感数据。 55 | - 内核 “Completion specs” 开源。 56 | - 正在打磨中的 Big Thing,将支持使用 fig.js API 构建自己的应用,打造终端应用生态系统。 57 | 58 | ## 摸鱼周报 59 | 60 | [@摸鱼周报 #55](https://mp.weixin.qq.com/s/zDhnOwOiLGJ_Nwxy5NBePw):第 55 期摸鱼周报来了,一起来看下本期概要: 61 | 62 | * 话题:WWDC22 码上就位,介绍今年 WWDC 的流程 63 | * 面试模块:iOS WebView 中的 User-Agent 64 | * 优秀博客:Swift 中修饰声明和类型的两种特性 65 | * 学习资料:TypeScript 入门教程 66 | * 开发工具:一款适用于 mac 的简洁日历软件 itsycal 67 | 68 | ## 内推 69 | 70 | 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 71 | 72 | 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav 73 | 74 | 如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 75 | 76 | 当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 77 | 78 | ## 关注我们 79 | 80 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 81 | 82 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 83 | 84 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 85 | 86 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 87 | 88 | ## 说明 89 | 90 | 🚧 表示需某工具,🌟 表示编辑推荐 91 | 92 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 93 | -------------------------------------------------------------------------------- /Reports/2022/#213-2022.08.15.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #213 | 2022-08-15 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 How To Boost Your iOS Code Performance:[Reduce Searching In Array](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-reduce-searching-an-array-55fbdfee2050) / [Reducing Collection Type Initialisation](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-by-reducing-collection-type-initialisation-564bffee94a3) 11 | 12 | [@Smallfly](https://github.com/iostalks):这两篇文章介绍了一些提高编码性能的小技巧。在遍历数组时,要警惕多层循环,多思考是否可以利用 Set/Dictionary 降低复杂度。在循环体内尽量避免创建集合类型,特别需要关注值类型的 Copy-on-write。 13 | 14 | ### 🐕 [货拉拉 iOS 司机端线程治理总结](https://juejin.cn/post/7129391597967376415) 15 | 16 | [@AidenRao](https://weibo.com/AidenRao):文章主要介绍了货拉拉 iOS 司机端,在线程治理方面的实践。如:队列的管理和分配,高并发业务的梳理和重构,线程使用的合理性评估与改造,线程相关 crash 的排查和修复,长效机制的建立。 17 | 18 | ### 🐎 [Content transition in SwiftUI](https://swiftwithmajid.com/2022/08/02/content-transition-in-swiftui/) 19 | 20 | [@Damien](https://github.com/ZengyiMa):SwiftUI 框架从第一个版本就提供了视图转换功能。每当视图被移除或添加时,可以使用特定的动画来进行呈现。但是在视图内容发生变化时,SwiftUI 框架无法应用动画转换效果, SwiftUI 框架在最新迭代中为我们带来了内容转换的新特性。它允许我们在视图内容发生变化时应用特定的过渡动画,具体怎么做呢?对 SwiftUI 感兴趣的同学不妨一读。 21 | 22 | ### 🐢 [Shared with You implementation and testing explained](https://www.avanderlee.com/swift/shared-with-you/) 23 | 24 | [@享耳先森](https://github.com/iblacksun):WWDC 22 中苹果将原来仅 Apple 可用的 `Shared with you` 开放给所有开发者,本文详解了其工作机制和适配方式。 25 | 26 | ### 🐎 [Advances in Swift Package Manager's dependency access control](https://www.polpiella.dev/advances-in-swift-package-access-control/) 27 | 28 | [@张嘉夫](https://github.com/josephchang10):在最新的 Swift 5.7 development snapshot 中 `swift` 可执行文件新增了一个叫做 `--explicit-target-dependency-import-check` 的 flag,改进了 SPM 的依赖系统,允许开发者启用或禁用一个新的构建验证步骤,以检测未在 target 的依赖列表中明确定义的 import 语句,并相应触发 warning 或 error。作者在这篇文章中实际测试了这个新的 flag。 29 | 30 | ### 🐎 [MachO 代码签名剖析](https://juejin.cn/post/7017842746937311246) 31 | 32 | [@kemchenj](https://juejin.cn/post/7017842746937311246):验证代码的正确性是计算机科学中最难的问题之一,因为不存在普遍意义的正确的算法,所以这一验证通常使用数字签名处理。大家可以通过阅读本文思考代码来源是否合法和代码是否被修改过的验证是如何实现的。 33 | 34 | ### 🐎 [RTC 场景下的屏幕共享优化实践](https://mp.weixin.qq.com/s/tyD_y0xhCMEJg0tfTelHfA) 35 | 36 | [@邦Ben](https://weibo.com/linwenbang):该文章和 iOS 其实并没有直接关系,主要说在飞书上共享屏幕的情况下,如果进行一个策略的优化。通过算法进行识别当前屏幕的内容,然后进行分析自动切换到不同的模式。 37 | 38 | 1. 清晰模式:主打清晰度,尽量保持高分辨率(如:最高 4K 原画质),带宽或性能不足的时候,只降低帧率(如:从 30fps -> 5fps),不降低分辨率。 39 | 40 | 2. 流畅模式:主打流畅度,尽量提升帧率(如:最高 30fps),带宽或性能不足的时候,优先降低分辨率(如:从 4K -> 720p),最后才考虑降帧率。 41 | 42 | 手动切换是个基本的选择,但是通过自动化更佳。识别算法主要是:光流法,决策树,颜色直方图,方向统计。文章大体做了一些介绍,但是也比较属于入门概念介绍,有兴趣的同学可以了解一下。 43 | 44 | 45 | ## 工具 46 | 47 | ### 🐕 [Device List | AppleDB](https://appledb.dev/device-list.html) 48 | 49 | [@Barney](https://github.com/BarneyZhaoooo):**Device List** 可以方便地查询 Model、Name、Board、Soc 之间的对应关系。 50 | 51 | ## 摸鱼周报 52 | 53 | [@摸鱼周报 #64](https://mp.weixin.qq.com/s/Bd9MZDqmvmgp1UTr5WKPig):第 64 期摸鱼周报来了,一起来看下本期概要: 54 | 55 | * 本期话题:今年 8 月,把握与 App Store 专家会面交流的机会 56 | * 本周学习:Swift 闭包中的变量捕获 57 | * 内容推荐:程序开发文档及资源网站 58 | * 摸一下鱼:一款体感识别空气投篮模拟器 App;To-D 杂志 59 | 60 | 61 | ## 关注我们 62 | 63 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 64 | 65 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 66 | 67 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 68 | 69 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 70 | 71 | ## 说明 72 | 73 | 🚧 表示需某工具,🌟 表示编辑推荐 74 | 75 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 76 | -------------------------------------------------------------------------------- /Reports/2022/#214-2022.08.22.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #214 | 2022-08-22 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 [iOS 中的字节对齐](https://juejin.cn/post/7132403137725333518) 11 | 12 | [@Smallfly](https://github.com/iostalks):字节对齐是 C 语言中的概念,Objective-C 作为 C 语言的超集,iOS 开发者也需要对字节对齐有所了解。本文给出了一些字节对齐的建议,以及字节对齐的相关介绍: 13 | 14 | - 什么是字节对齐 15 | - 为什么要字节对齐 16 | - 字节不对齐的风险 17 | - 字节对齐对编程的启示 18 | - Objective-C 字节对齐实现 19 | 20 | ### 🐕 [iOS 底层原理 39:Instruments 系列(三)Animation Hitches](https://mp.weixin.qq.com/s/fTmgN5phGQtbQOUHZ7Pe3Q) 21 | 22 | [@Leo](https://github.com/leomobiledeveloper):由于高刷屏和动态帧率的设备出现,用 FPS 来衡量界面的流畅性已经不那么准确了,所以 Apple 提出了 Animation Hitche 这个概念来衡量滑动期间的掉帧情况。本文详细讲解了界面渲染的阶段和原理,并且涵盖了不同阶段引起 Hitche 的原因和解决办法,对流畅性优化有非常好的参考意义。 23 | 24 | ### 🐢 [网络通信 | HTTP(S) 那些事儿](https://mp.weixin.qq.com/s/YtyrIl8UWK43iYfjN4HUyQ) 25 | 26 | [@AidenRao](https://weibo.com/AidenRao):HTTP 在整个互联网是非常常见的,比如我们看剧、刷短视频、面向 Google 编程,都会用到它。作为研发,我们有义务深入了解它的结构、规范和设计思路。看完本文你将能够: 27 | 28 | 1. 🔍 快速定位 HTTP 问题; 29 | 2. 🥣 熟悉 HTTP 报文里的常见头字段; 30 | 3. 🔐了解基本的加密知识。 31 | 32 | 最终拥有通过 WireShark、Chrome、Telnet 等工具,甚至 RFC 文档去自行深入学习 HTTP 的能力。 33 | 34 | ### 🐕 [iOS 16 NSURLComponents 行为变更] 35 | 36 | [@极速男孩](https://github.com/ztlyyznf001):在 HTTPURL 的 [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) 规范中规定,URL 中只允许包含以下四种: 37 | 1. 英文字母 38 | 2. 数字 39 | 3. ``-_.~`` 4 个特殊字符 40 | 4. 所有保留字符,包括 ! * ’ ( ) ; : @ & = + $ , / ? # [ ] 41 | 42 | 并且要求在使用特殊字符的时候将特殊字符转换成相应十六进制。 43 | 所以在 iOS16 中如果你使用 44 | ```[NSURLComponents componentsWithString:]``` 45 | 或者 46 | ```[NSURLComponents componentsWithURL:resolvingAgainstBaseURL]``` 47 | 的方法去构建一个不符合 RFC3986 规范的 URL(常见的比如 URL 中包含 - 或者 _ )时会直接返回一个 nil。 48 | 49 | ### 🐕 [Flutter 状态管理新的实践](https://mp.weixin.qq.com/s/oNjRt2qGHetEXLtkDPU63A) 50 | 51 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): 声明式 UI 其实并不是近几年的新技术,但是近几年声明式 UI 框架非常的火热。单说移动端,跨平台方案有:RN、Flutter。iOS 原生有:SwiftUI。android 原生有:compose。Flutter 平台上就有多种方案,BLoc,Provider,RivePod,GetX 等。本文从函数编程方向做新尝试,是一份不错的学习资料。小编建议,对于 Rx 系列框架不熟悉的,不要轻易放到生产环境中 . 52 | 53 | 54 | ## 工具 55 | 56 | ### 🐎 [Xcode console 替代方案 - ConsoleRedirect](https://github.com/luoqisheng/ConsoleRedirect) 57 | 58 | [@水水](https://www.xuyanlan.com): ConsoleRedirect 是一款通过 redirect App 的 stderr 和 stdoutput 将 Xcode 的输出实时同步写到 macosx 下指定目录的工具。配合 klogg 等日志查看工具,可以实时查看、过滤、查找、高亮 Xcode 的控制台输出。用于代替功能比较单薄的 Xcode 控制台输出,操作比较简单,有需要的朋友可以一试。 59 | 60 | ### [Pulse 2.0 released](https://kean.blog/post/pulse-2) 61 | 62 | [@kemchenj](https://kemchenj.github.io):Pulse 是一个 Apple 平台的开源日志框架,不止提供了 AppKit/UIKit 集成,也提供了可视化的工具 App 查看日志。最近推出了 2.0 版本,进行了大量重写,包括了: 63 | 64 | - 新增 macOS/watchOS/tvOS 的日志查看工具,使用 SwiftUI 实现。 65 | - 性能提升: 66 | - 日志存储空间减少 90%。使用苹果提供的 lzfse 进行压缩,并且使用 SHA1 替代之前的 SHA256。 67 | - 日志的预览图改为小尺寸的缩略图,并且使用 HEIF 编码,以 Demo 为例减少了 99% 的存储占用。 68 | - 文档格式优化。允许控制分享的时间范围,并且使用 lzfse 替代 ZIPFoundation,可以减少分享的文件大小。 69 | - 文档重写,使用 DocC 进行生成。 70 | 71 | ## 摸鱼周报 72 | 73 | [@摸鱼周报 #65](https://mp.weixin.qq.com/s/lvMHf5qQHpnDGLz1KY-2dg):第 65 期摸鱼周报来了,一起来看下本期概要: 74 | 75 | * 本期话题:App Accelerator 分享会 & 什么是精准测试 76 | * 本周学习:iOS Memory 内存概念 77 | * 内容推荐:Swift 内容推荐 & Github 实用技巧 78 | * 摸一下鱼:两款动态图片生成器,iOS 16 Beta 6 和 iPhone 14 发布日期确认,系统设计课程以及 Go 语言教程,IAP 服务端通知状态码变化流程。 79 | 80 | ## 关注我们 81 | 82 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 83 | 84 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 85 | 86 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 87 | 88 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 89 | 90 | ## 说明 91 | 92 | 🚧 表示需某工具,🌟 表示编辑推荐 93 | 94 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 95 | -------------------------------------------------------------------------------- /Reports/2022/#218-2022.09.26.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #218 | 2022-09-26 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐕 [中心化决议管理——云端分析](https://mp.weixin.qq.com/s/BcX73VpSBxAgjOwoKaEoEw) 11 | 12 | [@JonyFang](https://github.com/JonyFang):本文主要分享了目前字节跳动内部的一种 CocoaPods 云端化的优化方案,针对大量重复的 iOS 工程流水线构建任务进行了收敛和复用,在保证依赖决议正确性的前提下加速了依赖管理速率,提升了研发效能。目前云端分析服务已经完成第一阶段的开发并落地使用,已被内部几个核心的生产线使用。 13 | 14 | 内容结构: 15 | 1. 背景 16 | 2. 什么是云端依赖分析 17 | 3. 如何加速决议 18 | - 制品库(全量组件索引信息) 19 | - 缓存机制(排序 Version 缓存、Spec 对象缓存、缓存复用) 20 | - 物料剪枝 21 | - 决议策略兼容 22 | 23 | ### 🐎 [How to use UIViewController in SwiftUI](https://sarunw.com/posts/uiviewcontroller-in-swiftui/) 24 | 25 | [@Damien](https://github.com/ZengyiMa):在 iOS 开发中,SwiftUI 和 UIKit 将会长期共存,无论使用的是哪种框架,有时你都可能需要相互调用,幸运的是,Apple 可以轻松地将 UIKit 代码引入 SwiftUI 中使用,在本文中,作者将向你展示如何在 SwiftUI 使用 UIViewController。有兴趣的读者不妨一读。 26 | 27 | ### 🐎 [viewDidLoad() in SwiftUI](https://sarunw.com/posts/swiftui-viewdidload/) 28 | 29 | [@zvving](https://github.com/zvving):从 UIKit 来到 SwiftUI 世界,你可能会困惑:`viewDidLoad()`在 SwiftUI 下的等效方法是什么? 30 | 31 | 在声明式视图框架体系下,苹果并没有提供 `load view` 的行为细节回调。在绝大多数场景,可以通过 `onAppear()` 模拟 `viewDidLoad()` 的近似方法。本文详细介绍了模拟过程,以及如何封装成 `view modifier` 方便使用。 32 | 33 | ### 🐕 [云音乐 iOS 启动性能优化「开荒篇」](https://mp.weixin.qq.com/s/XVd9QNvXgJx_9K3XHAcaSA) 34 | 35 | [@Smallfly](https://github.com/iostalks):启动速度是 App 的「门面」,影响用户第一使用体验,是非常重要的体验优化项。本文记录了云音乐 App 在 iOS 13 之后冷启动优化实践。 36 | 37 | 以 `main()` 函数作为分界点,分别从 T1 和 T2 两个阶段进行针对性的优化。T1 阶段的治理主要包括动态库治理、+load 方法、无用代码清理、二进制重排;T2 阶段的治理主要是高频 OC 方法、runtime 符号遍历、网络相关、系统接口、业务影响等等。 38 | 39 | 经过阶段性的启动性能专项优化,云音乐 App 启动性能提升了 30%+。 40 | 41 | ### 🌟 🐕 [大终端领域的新物种-KUN](https://mp.weixin.qq.com/s/tDDI9Wn5eUTOJKHxYL27xg) 42 | 43 | [@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 动态化的尝试和建设在社区从未停止过,今年来各种方案层出不穷: AST 解析,JS Engine+,Lua VM 等,各有千秋;KUN 是咸鱼团队基于 Kraken 产出的一套夸多端的 Flutter 动态化方案,兼顾 iOS & Android 动态化的同时,对齐 W3C 标准做到 Web 端兼容,其整体方案的思路值得深入学习和借鉴,暂时并未开源。 44 | 45 | ## 音视频 46 | 47 | ### 🐎 🚧 [Dynamic Island Animation explained](https://twitter.com/BradEllis/status/1570892167807377409?s=20&t=T38Q6Acu_TAqOGhWbmQE0A) 48 | 49 | [@ChengzhiHuang](https://github.com/ChengzhiHuang):你是否很好奇灵动岛的动画是如何设计出来的,作者通过将两个圆叠在一起,先模糊(blur)再锐化(sharpen),得到蒙层,复现了同样的动效。 50 | 51 | ## 摸鱼周报 52 | 53 | [@摸鱼周报 #69](https://mp.weixin.qq.com/s/Miy8xsHYHHSXsl5NtxswQA):第 69 期摸鱼周报来了,一起来看下本期概要: 54 | 55 | * 本期话题:使用 iOS 16.1 Beta 版和 Xcode 14.1 Beta 版,准备登陆灵动岛 56 | * 本周学习:了解符号 Symbol 57 | * 内容推荐:Swift、SwiftUI 相关好文推荐 58 | * 摸一下鱼:iOS 16 锁屏组件以及几个有趣的小工具:emojimix、hexclock、能不能好好说话 59 | 60 | ## 关注我们 61 | 62 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 63 | 64 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 65 | 66 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 67 | 68 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 69 | 70 | ## 说明 71 | 72 | 🚧 表示需某工具,🌟 表示编辑推荐 73 | 74 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 75 | -------------------------------------------------------------------------------- /Reports/2022/#221-2022.10.31.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #221 | 2022-10-31 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [全新升级 | 第十七届 D2 终端技术大会终于来了~](https://mp.weixin.qq.com/s/e1ilPhCaJDT9takQE9vpBA) 11 | 12 | D2 的前身是「前端技术论坛」,应该有不少前端朋友对它非常了解,去年大概有 2000 多个人报名。今年也升级成了「终端技术大会」,加入了不少客户端的内容,D2 不仅会重视内容的深度,同时也会拓宽内容的广度,希望和大家一起了解一线互联网在前端 / 客户端领域的技术探索与未来。此外,本届 D2 两大方向所擦出的火花,将为单一技术栈的同学带来更多方向性的输入。 13 | 14 | 从目前报名的议题上看含金量应该会非常不错。目前活动也已经正式官宣了,感兴趣的可以关注下。 15 | 16 | ### [Apple 的安全研究平台正式公开上线](https://mp.weixin.qq.com/s/M_NZF8F9r9PNkKTQbOycNg) 17 | 18 | 苹果的安全平台 [Apple Security Research](https://security.apple.com/) 正式公开上线,可以看作苹果将更加重视社区提交的安全报告。苹果承诺将更快地对提交的内容做出回应,并且提供了更便捷地追踪提交漏洞的方式,开发者能够及时获得状态的更新。并且团队上线了一篇 XNU 内存安全的 [kalloc_type 介绍](https://security.apple.com/blog/towards-the-next-generation-of-xnu-memory-safety/)文章。 19 | 20 | 同时直到 11月 30 日截止,[Apple Security Research Device Program](https://security.apple.com/research-device) 还在接收报名,对安全研究感兴趣的同学可以报名。 21 | 22 | ## 文章 23 | 24 | ### 🐢 [iOS 高级之美(六)—— malloc 分析](https://juejin.cn/post/6844904033908424717) 25 | 26 | [@xuyafei86](https://github.com/xiaofei86):“iOS 高级之美” 是作者对自己工作中研究的一些总结,涵盖了常见的 Runtime 面试考点。此系列文章围绕底层进行源码分析、LLDB 调试、源码断点和汇编调试,共有 6 篇文章: 27 | 28 | 1. iOS_objc4-756.2 最新源码编译调试 29 | 2. OC 对象底层上篇 30 | 3. OC 对象底层下篇 31 | 4. isa 原理分析 32 | 5. 类结构分析 33 | 6. malloc 分析 34 | 35 | 本篇针对 malloc 展开分析,感兴趣的同学可以阅读原文一探究竟。 36 | 37 | ### 🐎 [iOS ADRP 汇编指令与虚拟内存](https://juejin.cn/post/7159152535062888479) 38 | [@Damien](https://github.com/ZengyiMa):你了解 ADRP 吗? ADRP 意为符号的页数地址,那么它是如何生成和确定的呢?本文作者会从最基本的 UITextView 的使用出发,深入汇编源码,一步步为我们展示阐述其中的原理,感兴趣的同学不妨一读。 39 | 40 | ### 🐎 [iOS SIGKILL 信号量崩溃抓取以及优化实践](https://mp.weixin.qq.com/s/2S3XIpKXMnYNFayeBE_d2Q) 41 | [@JonyFang](https://github.com/JonyFang): 和其他信号不同,SIGKILL 不可被捕获,这是 Linux/Mach 内核的限制,为了让操作系统在程序无法响应的时候,可以从上一层控制进程的生命周期。自 iOS 13 后,引入了 MetricKit 框架,可以用来汇总和分析有关异常和崩溃诊断以及电源和性能。本文即介绍了如何使用 MetricKit 收集 SIGKILL 信号量、获取崩溃信息,基于 Code 的含义解析 SIGKILL 日志的过程。最后,也介绍了百度 App 常见的 SIGKILL 问题。 42 | 43 | ### 🐎 [Compiling Swift generics, Part I](https://forums.swift.org/t/compiling-swift-generics-part-i/60898) 44 | 45 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这是讲解 Swift 泛型如何工作系列文章中的第一部,并且提供了文档和源码。文中首先对 Swift 泛型背后的关键思想进行了总体概述,然后继续讨论对理解 Swift 编译器很重要的基础材料:编译管道、模块系统、请求评估器、类型和声明,最后深入探讨了泛型实现的细节:从泛型声明的 AST 开始,然后讨论泛型签名、替换映射、一致性和泛型环境。 46 | 47 | 48 | ## 代码 49 | 50 | ### [推荐一个 Swift Concurrency 拓展库](https://github.com/ChimeHQ/ConcurrencyPlus) 51 | 52 | [@Cooper Chen](https://github.com/cjlcooper):这是一个轻量级的 Swift Concurrency 拓展库,在开发 Swift 并发相关方面提供了一些优秀的工具拓展。 53 | - 提供基于 FIFO 排队的 TaskQueue 54 | - 提供 CheckedContinuation 扩展用于提升效率 55 | - 在桥接非异步代码时提升任务扩展的性能 56 | - 提供了安全的异步集成 NSXPCConnection 扩展 57 | - 提供 MainActor.runUnsafely 来解决不受控制的错误或注释不足的代码 58 | 59 | ## 内推 60 | 61 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 62 | 63 | - [上海] 拼多多 - 特效团队 - Android/iOS 64 | - [上海] 七猫小说 - iOS/Android/前端/go/大数据 高级、资深工程师 65 | - [武汉] 微派网络 - 会玩app/青藤之恋 - iOS/Android 66 | - [杭州] 手机淘宝 - 基础链路客户端团队 - iOS/Android 67 | - [杭州] 淘宝 - 原生研发模式 - iOS/Android 68 | - [杭州] 淘宝 - 跨端引擎与开放技术 - iOS/Android/C++ 69 | - [北京/深圳/广州/三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 70 | 71 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 72 | 73 | ## 关注我们 74 | 75 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 76 | 77 | **关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** 78 | 79 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 80 | 81 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 82 | 83 | ## 说明 84 | 85 | 🚧 表示需某工具,🌟 表示编辑推荐 86 | 87 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 88 | -------------------------------------------------------------------------------- /Reports/2023/#260-2023.09.11.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #260 | 2023-09-11 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/260.png?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐕 [Hidden feature: static properties](https://www.swiftwithvincent.com/blog/hidden-feature-static-properties) 11 | 12 | [@极速男孩](https://github.com/ztlyyznf001):Swift 的静态属性具有一项隐藏特性:它们是隐式懒加载的,只在首次访问时初始化。这意味着,即使应用中有许多静态属性,它们也不会在应用启动时全部初始化,从而优化性能。若尝试显式地用 lazy 关键字声明静态属性,Swift 会报错,因为静态属性已经是懒加载的。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [C++ 知识体系总结:语言核心与代码工程](https://mp.weixin.qq.com/s/lQoH4UF36_zKrw-Jbp2ylw) 17 | [@莲叔](https://github.com/aaaron7):这篇文章初看下属于谁看了必然会收藏但大概率不会看的文章。但看完后又给我很不一样的体感,虽然文章较长而且涉及的点比较多,但并不是单纯追求大而全,而是围绕 C++ 一些常用的新特性进行了介绍,根据我的经验在现代 C++ 的项目里几乎都会用到里面介绍的特性,同时每个特性都包含示例代码帮忙理解,大幅提高了学习的效率。对于工作中需要和 C++ 打交道的同学来说是很不错的资料。 18 | 19 | ### 🐎 [The new Swift section in binaries built with Swift 5.9 and Xcode 15, \_\_TEXT/\_\_constg_swift](https://twitter.com/sond813/status/1699822345471541415) 20 | 21 | [@kemchenj](https://kemchenj.github.io):Swift 在运行时经常需要遍历查询类型的元信息,但 Swift 编译链接后的二进制产物里,类型的元信息是各自分散的,导致启动时会频繁触发 page fault,并且 CPU 缓存命中率也会下降。 22 | 23 | 在即将发布的 Swift 5.9 里,编译器会将这些信息集中存放到各自的 Section 里,改善前面提到的问题。 24 | 25 | ### 🐕 [一线大厂程序员的考公上岸心得](https://mp.weixin.qq.com/s/dlOEngLD150RaTkAlAVkww) 26 | 27 | [@老驴](https://weibo.com/u/6090610445):一篇和我们之前推荐的很不一样的文章,是一位之前在微软的 Edge 的同学,后来如何考公务员的访谈。在大家都不容易的时间里,算是比较有意思的经验分享。当然,这不代表老司机的立场,只是做一个分享,能让大家看到一些不一样的视角。 28 | 29 | ### 🐕 [Xcode 15 iOS 17 小组件适配必看:Widget needs to adopt container background](https://www.craft.me/s/UOcc5BqYFazbL2) 30 | 31 | [@anotheren](https://github.com/anotheren):在使用 Xcode 15 后,如果你的项目代码包括了小组件,那么就会收到 "Widget needs to adopt container background" 的提示,要求进行相关适配。本文介绍了相关适配的要点,推荐阅读。 32 | 33 | ### 🐕 [Develop and test OpticID for Vision Pro](https://blog.eidinger.info/develop-and-test-opticid-for-vision-pro) 34 | 35 | [@EyreFree](https://github.com/EyreFree):Optic ID 是一种全新的安全生物识别系统,用于对用户进行身份验证,它的调用方式和在 iOS App 中使用 FaceID 类似。在这篇博文中,作者解释了开发者应该如何利用 Optic ID 进行身份验证以及如何在 Vision Pro 模拟器中测试 OpticID,感兴趣的同学可以阅读原文进行了解。 36 | 37 | ### 🐕 [实战总结|抽丝剥茧,记一次神奇的崩溃](https://mp.weixin.qq.com/s/vMlK7oIQH62VV6qHSPHnQQ) 38 | 39 | [@xuyafei86](https://github.com/xiaofei86):本文详细回放了一个崩溃案例的分析过程,感兴趣的同学可以阅读原文了解。 40 | 1. 回顾了 C++ 多态和类内存布局相关知识,了解原理后查看内存让我们看到了更多代码内部的细节。 41 | 2. 回顾了 pc 指针的含义并了解了更多 arm 异常处理机制,解释了一些日常认为理所当然的结论背后的原理。 42 | 3. 回顾了内存屏障相关知识,并构造了 demo 对理论分析进行了实践验证。 43 | 44 | 45 | ## 工具 46 | 47 | ### 🐎 [京东京喜 iOS 包体积分析工具](https://juejin.cn/post/7273740834201600063) 48 | [@Damien](https://github.com/ZengyiMa):一款用于分析 iOS IPA 包的脚本工具,使用此工具可以自动扫描发现可修复的包体积问题,同时可以生成包体积数据用于查看。工具京东京喜团队内部已经使用很长一段时间,希望可以帮助到更多的开发同学更加效率的优化包体积问题。 49 | 50 | ## 代码 51 | 52 | ### 🐎 [add a label to the outer loop and use break with the label](https://twitter.com/lee_kah_seng/status/1696795033033208151?s=43&t=Oi5pq1Y0PftkjDmJadkvxQ) 53 | 54 | [@zoeGuo](https://github.com/zoeGuo):在 Swift 中使用嵌套循环的时候,你可能会有这样的需求:同时跳出内部和外部的循环;这个时候就可以为外层循环添加一个标签,在需要 break 的时机,选择 break 这个标签。 55 | 56 | ## 内推 57 | 58 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 59 | 60 | [杭州] 淘宝 - 终端平台 - iOS/Android/C++ 61 | 62 | [广州] 微信公众号 - iOS 63 | 64 | [北京] 快手 - 本地生活 - iOS 65 | 66 | [上海 / 北京] MiniMax - iOS 67 | 68 | [广深] TikTok 直播 - 社交互动团队 - iOS/Android 69 | 70 | [北京] 知乎 - 会员业务 - iOS 71 | 72 | [上海] 扫描全能王 - iOS 73 | 74 | [深圳] 手机 QQ - 终端架构 - iOS - T10/T11 75 | 76 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 77 | 78 | ## 关注我们 79 | 80 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 81 | 82 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 83 | 84 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 85 | 86 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 87 | 88 | ## 说明 89 | 90 | 🚧 表示需某工具,🌟 表示编辑推荐 91 | 92 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 93 | -------------------------------------------------------------------------------- /Reports/2023/#268-2023.11.20.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #268 | 2023-11-20 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/268.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### [Generating Random Numbers Elegantly in Swift ](https://www.swiftjectivec.com/swift-randomnumbergenerator/) 11 | 12 | [@zoeGuo](https://github.com/zoeGuo):文章介绍了在 Swift 中使用 RandomNumberGenerator 实现产生随机数的方式。写法优雅,可以产生自己任意范围的随机数,线程安全,还会根据 Swift 运行的平台来决定实现随机数的 api。 13 | 14 | ## 文章 15 | 16 | ### 🐎 [Reasoning about protocols](https://www.swiftindepth.com/articles/reasoning-about-protocols/) 17 | 18 | [@J_Knight_](https://github.com/knightsj):本文作者结合代码实例介绍了在 Swift 中面向协议编程的几个应用场景(动态派发,类泛型,编译期约束和实现合成)。 19 | 20 | ### 🐕 [在 Airbnb 爱彼迎解锁 SwiftUI](https://mp.weixin.qq.com/s/AokW7NZvjBT76iaRnEnsOA) 21 | 22 | [@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了 Airbnb 在 iOS 应用中采用 SwiftUI 替代原有的 UI 框架 Epoxy 的实践。 也解释了为什么他们决定在 Airbnb 中使用 SwiftUI,并详细介绍了如何将 SwiftUI 集成到 Airbnb 的界面设计中。一个很好的实践,可以作为大家引入 SwiftUI 的参考。 23 | 24 | ### 🐕 [The complete guide to iOS & macOS development in Neovim](https://wojciechkulik.pl/ios/the-complete-guide-to-ios-macos-development-in-neovim) 25 | 26 | [@Smallfly](https://github.com/iostalks):使用 Xcode 开发大型项目的体验一言难尽,这篇文章手把手教你如何在 Neovim 搭建 iOS&macOS 开发环境。支持的功能主要有: 27 | - 代码补全(Code Completion) 28 | - 代码检查与格式化(Linting & Formatting) 29 | - 构建、运行与测试(Build, Run & Test) 30 | - 调试(Debugging) 31 | 32 | 所有这些一起至少覆盖了 90% 以上的开发时间,还有少部分功能还是需要依赖 Xcode,例如性能跟踪、调试 UI、管理签名证书等。如果你是一名 vim 党,推荐一试。 33 | 34 | ### 🐎 [An early look at the future of testing with swift-testing](https://www.polpiella.dev/swift-testing/) 35 | 36 | [@kemchenj](https://kemchenj.github.io/):Swift 团队在前一段时间推出了 swift-testing 的 beta 版本,旨在替代 XCTest,让开发者可以用更加现代化的语法编写测试。 37 | 38 | 这篇文章用一个简单的例子介绍了 swift-testing 的接入和用法,可以看到跟 XCTest 对比提供了更简洁的语法,更好的 async 支持以及更加清晰的诊断信息。 39 | 40 | ### [百度 APP iOS 端包体积 50M 优化实践(七)编译器优化](https://mp.weixin.qq.com/s/fmiccOgRx9_wopX9QmZiEA) 41 | 42 | [@JonyFang](https://github.com/JonyFang): 本文介绍了百度 APP iOS 端包体积优化的编译器优化方案。涉及到的点有:GCC 语言编译优化、Swift 编译优化、LTO 优化、剥离调试符号、剥离符号表、剔除未引用代码、Asset 优化、C++ 虚函数优化、三方 SDK 编译器方向瘦身、指令集架构优化、Xcode 升级优化、Swift 内置动态库优化等。 43 | 44 | ## 工具 45 | 46 | ### [SwiftBar](https://github.com/swiftbar/SwiftBar) 47 | 48 | [@xuyafei86](https://github.com/xiaofei86):SwiftBar 是一款使用 Swift 编写,用来在 MacOS 菜单栏上展示自定义功能的开源工具。可以使用 Homebrew 安装,只需编写一个 Shell 脚本并将其添加到 SwiftBar 即可使用。你还可以从其插件仓库安装别人编写的脚本,比如展示 CPU 和内存占用、处理文本等。 49 | 50 | ## 设计 51 | 52 | ### 🐎 [Ensure Visual Accessibility: Glyphs, Icons and Shapes](https://www.createwithswift.com/ensure-visual-accessibility-glyphs-icons-and-symbols/) 53 | 54 | [@水水](https://www.xuyanlan.com/):了解如何正确使用应用程序 UI 上的视觉元素,同时保持其可访问性,包括字形、图标和形状,这些是传达信息、指导我们行动和塑造我们感知的基础。在苹果生态系统中鼓励正确的使用象形文字以及其组合来设计你的视觉元素,需要保证其具有清晰、一致性并且支持辅助功能标签。这篇文章还给了很多相关设计上的具体建议,感兴趣的可以参考。 55 | 56 | ## 音视频 57 | 58 | ### 🐢 [SwiftUI + Metal – Create special effects by building your own shaders](https://www.youtube.com/watch?v=EgzWwgRpUuw) 59 | 60 | [@Cooper Chen](https://github.com/cjlcooper):视频介绍了基于 SwiftUI + Metal 的形式,通过构建自己的着色器来创建特殊效果,包括如何重新着色、如何实现动画渐变、如何进行形状转换等内容,对于从 c++ 过渡到 SwiftUI 开发 Metal 相关内容的开发者有着很好的参考价值。 61 | 62 | ## 内推 63 | 64 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 65 | 66 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 67 | 68 | ## 关注我们 69 | 70 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 71 | 72 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 73 | 74 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 75 | 76 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 77 | 78 | ## 说明 79 | 80 | 🚧 表示需某工具,🌟 表示编辑推荐 81 | 82 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 83 | -------------------------------------------------------------------------------- /Reports/2023/#269-2023.11.27.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #269 | 2023-11-27 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/269.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### 🐢 [Flutter 3.16 + Dart 3.2 发布](https://mp.weixin.qq.com/s/vbkhjPNboqK1oDy_J5pzeA) 11 | 12 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 常规季度更新发布了,本次发布为 Flutter 3.16 + Dart 3.2; 一如既往,本次更新还是以稳定性和性能优化为主,其中值得关注的是 Android Impeller 和 Material 3 成为新的默认主题, 当然了在组件和工具链上也做出了不少改进和更新,感兴趣的同学可以在文中注意查看;[另一个值得关注的点是 Dart 3.2 发布,该版本在 Dart Web 和 Wasm 做了较多更新](https://mp.weixin.qq.com/s/UA5MQLzdf_ZPS56EdNLf2A),从这里可以看到 Flutter 团队对于浏览器端的努力一直在持续,可预见的是 Flutter 在浏览器端的未来可期 13 | 14 | ## 新手推荐 15 | 16 | ### 🐎 [Swift strings look identical but aren't](https://damian.fyi/swift/2023/11/13/swift-strings-look-identical-but-aren't.html) 17 | 18 | [@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了两个看起来相同的字符,因为当中包含一个 '\u{FEFF}' 字节顺序标记导致他们出现不相等的情况,作者用了 String 扩展和 'trimmingCharacters(in: .controlCharacters)' 的方式来移除这个标记。 19 | 20 | ## 文章 21 | 22 | ### 🌟 🐢 [What Every C Programmer Should Know About Undefined Behavior #1/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html) [#2/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html) [#3/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html) 23 | [@Smallfly](https://github.com/iostalks):这是探讨 C 系语言未定义行为的系列文章。在系列的第一部分中,作者解释了 C 语言中的未定义行为,并展示了一些案例,说明了它使 C 语言比「安全」语言更具性能的原因。在第二部分,探讨了未定义行为导致的令人惊讶的错误,以及许多程序员对 C 语言存在的一些广泛误解。在最后一部分,探讨了编译器在提供陷阱警告时面临的挑战,并讨论 LLVM 和 Clang 提供的一些功能和工具,以实现性能提升的同时减少一些意外情况发生。 24 | 25 | ### 🐕 [Debugging SwiftUI views: what caused that change?](https://www.avanderlee.com/swiftui/debugging-swiftui-views/) 26 | 27 | [@Barney](https://github.com/BarneyZhaoooo):本文介绍了调试 SwiftUI 的关键技巧。使用 Self._printChanges 或 Self._logChanges 静态方法可以帮助我们找到引起重绘的根本原因。将视图单一化简单化往往是排查复杂问题的关键,文章分下面五个步骤娓娓道来。 28 | 29 | - **What is a dynamic SwiftUI View?** 30 | - **The problem of a Massive SwiftUI View** 31 | - **Using LLDB to debug a change** 32 | - **Solving redraw issues in SwiftUI** 33 | - **Debugging changes using code** 34 | 35 | ### 🐎 [Custom Traits and SwiftUI](https://useyourloaf.com/blog/custom-traits-and-swiftui/) 36 | 37 | [@Damien](https://zengyima.github.com/):本文主要讲述了在 iOS 17 中,开发者可以添加自定义 Traits 到 UIKit Traits 环境中,并与 SwiftUI 环境进行互操作。在 iOS 17 中,Traits 的处理方式发生了重大变化,Traits 现在可以从 UIScreen、UIWindowScene、UIViewController、UIView 等流向任何子视图控制器。此外,还介绍了如何创建一个自定义 Traits,并给出了一个实际的例子。 38 | 39 | ### 🐎 [Revealing and explaining package scores](https://blog.swiftpackageindex.com/posts/revealing-and-explaining-package-scores) 40 | 41 | [@EyreFree](https://github.com/EyreFree):这篇文章主要介绍了 Swift Package Index 中的一个新功能:Package 评分,并解释了这个分数是如何计算的。得分系统基于多个特征来评估软件包,包括:软件包是否被存档、是否拥有与 App Store 兼容的开源许可证、发布次数、Star 数量、依赖数量、最近活动、文档和贡献者数量、是否有测试代码和是否有 README 文档等,可以作为大家选择开源库的参考。 42 | 43 | ## 代码 44 | 45 | ### [MachOView](https://github.com/gdbinit/MachOView) 46 | Mach-O 相信很多同学或多或少已经接触过或者有所了解,它是 Mach Object 文件格式的缩写,是 mac 以及 iOS 上的可执行文件。MachOView 这个工具可以快速查看 Math-O 格式的文件,简单易用,同时工具在今年迎来了 3.0 版本的大更新。对于经常需要分析静态库等文件的同学可以下载使用 47 | 48 | ## 内推 49 | 50 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 51 | 52 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 53 | 54 | ## 关注我们 55 | 56 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 57 | 58 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 59 | 60 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 61 | 62 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 63 | 64 | ## 说明 65 | 66 | 🚧 表示需某工具,🌟 表示编辑推荐 67 | 68 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 69 | -------------------------------------------------------------------------------- /Reports/2023/#270-2023.12.04.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #270 | 2023-12-04 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/270.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### 即将迎来圣诞审核高峰,各位开发者调整好提交时间 11 | 12 | 苹果预告将在 12 月 22~27 日 迎来圣诞假期,期间审核会相对变慢,根据惯例加急也会照常开放,有期间发版需求的同学需要早做安排。根据往年经验在 20 日提审大概率可以在高峰来临前通过审核。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [建立个人学习观|地铁上的自习室](https://mp.weixin.qq.com/s/azyF-y5jPIy5trOpZFf0pA) 17 | 18 | [@含笑饮砒霜](https://weibo.com/chinafishnews/): 本文旨在帮助初入职场或陷入迷茫的读者建立个人学习观,强调在日常生活中保持学习心态,在不同空间和阶段中收获额外的东西,让学习成为一种习惯,丰富自己的知识和人生。 19 | 20 | ### 🐎 [Missing Xcode run test buttons](https://paul-samuels.com/blog/2023/10/24/missing-xcode-run-test-buttons/) 21 | 22 | [@Barney](https://github.com/BarneyZhaoooo):Xcode 运行测试按钮缺失恢复的小技巧、复制测试类名到导航器面版的过滤器中然后在该面板中点击播放按钮。 23 | 24 | ### 🐎 [Apple’s use of AppKit, Catalyst, Swift and SwiftUI in macOS Sonoma](https://blog.timac.org/2023/1128-state-of-appkit-catalyst-swift-swiftui-mac/) 25 | 26 | [@Smallfly](https://github.com/iostalks):这篇文章对 macOS 的开发组件和语言的演变提供了深入洞察,涉及了二进制数量、编程语言选择以及 UI 框架采用等方面。Sonoma 总共有 7884 个二进制文件,其中 Objective-C 仍然是核心语言,Swift 使用率不断增加。 27 | 28 | SwiftUI 在 Sonoma 中得到显著应用,文章还观察到 Swift 在安全区域处理器中的使用,展示了 Swift 在受限环境中的适用性。总体而言,Swift 和 SwiftUI 的采用不断增长,而 Mac Catalyst 则呈下降趋势,标志着这项技术已进入过渡期。 29 | 30 | ### 🐕 [Observable Architecture Beta!](https://www.pointfree.co/blog/posts/125-observable-architecture-beta) 31 | 32 | [@zvving](https://github.com/zvving):Swift 5.9 引入的 `@Observable` 标志着数据驱动 UI 方式的重大转变。随着这种变化,The Composable Architecture(TCA) 项目推出了重要的升级——集成 Observable 并向后兼容至 iOS 13 的新版本。目前,TCA 项目在 GitHub 上的关注已度突破了一万星标。 33 | 34 | 值得指出的是,TCA 是一种有较高学习和应用成本,但同时又提供大量示例和教程的重量级框架。如果你对 TCA 感兴趣,可以通过[TCA - SwiftUI 的救星?系列文章](https://onevcat.com/2021/12/tca-1/)、[聊一聊可组装框架(TCA)](https://fatbobman.com/posts/the_Composable_Architecture/)或阅读[官方教程](https://pointfreeco.github.io/swift-composable-architecture/main/tutorials/meetcomposablearchitecture/)来深入了解。 35 | 36 | ### 🐎 [《产生式元编程》第三章 替换蓝染概念纤悉](https://mp.weixin.qq.com/s/V5LRUPhSCagSI5W3lj9hbw) 37 | 38 | [@J_Knight_](https://github.com/knightsj):本文作者结合代码介绍了宏被替换的过程:如果是有参数的宏。会先替换参数;如果是无参数的,则直接扫描。系统会将扫描一直循环进行下去,而扫描停止的条件是触发了蓝染。蓝染的概念是:一次扫描中,若是替换的 token 引用了其自身,该 token 就会被标记为不可处理状态。这个标记动作就称为 Painted blue。然后作者讲解了蓝染的触发机制,以及剖析了 C 预处理器不支持递归的原因。 39 | 40 | ### 🐎 [初探 SwiftUI Link](https://kyleye.top/posts/explore-swiftui-link/) 41 | 42 | [@kemchenj](https://kemchenj.github.io/):本文从 `Link` 在 watchOS 上无法成功打开链接开始探究,先是逆向出 `Link` 的实现,接着是私有 API `_openSensitiveURL` 的调用,`OpenSensitiveURLActionKey` 的实现细节,最终将研究的内容汇总得到最合理的解决方案。 43 | 44 | ### 🐎 [iPhone 加入游戏,但 USB-C 的乱纪元还没有完结](https://sspai.com/post/84508) 45 | 46 | [@老驴](https://weibo.com/u/6090610445):来自少数派的一篇科普向的文章,主要是给大家梳理下 USB-C ,Thunderbolt 和传输协议之间的各种交错复杂的关系。不过,即便你没有能完全搞懂也没关系,因为大多数情况下不影响基本的充电,而更多的是影响数据传输速度。 47 | 48 | ## 工具 49 | 50 | ### [devv.ai](https://devv.ai/) 51 | 52 | [@zoeGuo](https://github.com/zoeGuo):[devv.ai](https://devv.ai/) 自称“最懂程序员的新一代 AI 搜索引擎”。你可以用它来搜索某个技术名词,可以获得比较完善的技术摘要,还有引用原文。可以在上一问题上追加提问,因为接入了搜索引擎的数据,回答结果也都比较新,程序员可以试试用它学习一些新的概念。 53 | 54 | ## 内推 55 | 56 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 57 | 58 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 59 | 60 | ## 关注我们 61 | 62 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 63 | 64 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 65 | 66 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 67 | 68 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 69 | 70 | ## 说明 71 | 72 | 🚧 表示需某工具,🌟 表示编辑推荐 73 | 74 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 75 | -------------------------------------------------------------------------------- /Reports/2023/#273-2023.12.25.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #273 | 2023-12-25 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/273.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 [独立开发提高产品定位成功率:找到 3 个对标产品](https://juejin.cn/post/7312640704404832283) 11 | 12 | [@zoeGuo](https://github.com/zoeGuo):这是一篇独立开发者从自身经验中总结出的关于怎么找到产品方向,以及怎么提高产品定位成功率的文章。作者通过几个例子分别描述了“大池小鱼”原则,分别找到目标用户正在用的产品、同样卖点的产品以及你的参照产品,来快速定位你的独立开发产品。有多少读者是独立开发者或者正跃跃欲试独立开发呢?这篇文章也许会打开你的独立开发的思路哦~ 13 | 14 | ### 🐕 [货拉拉 iOS 模块化路由框架:TheRouterSwift](https://juejin.cn/post/7281889329584275471) 15 | 16 | [@EyreFree](https://github.com/eyrefree):这篇文章介绍了货拉拉团队开发的 iOS 模块化路由框架 TheRouterSwift,这是 TheRouter 系列的 Swift 版本,旨在提供给 Swift 开发者一个高效的路由框架,用于模块间解耦和通信。它支持页面导航跳转、路由自动注册、路由映射文件导出、服务自动注册、动态化能力、链式编程、Objective-C 的适配、本地和远程服务调用等功能,还支持异步获取注册类和路由本地缓存能力,以优化性能和提高灵活性。文章详细介绍了 TheRouterSwift 的功能和使用方法,感兴趣的同学可查看原文获取更多信息。 17 | 18 | ### 🐢 [苹果 iOS 分发和安装 App 的那些趣事](https://juejin.cn/post/7315260397371490319) 19 | [@享耳先森](https://github.com/iblacksun):本文介绍了苹果 iOS 应用分发和安装的一些有趣的事。讨论了不同的开发者计划和分发方式:包括企业签名、超级签名、TestFlight 签名和 MDM 超级签名,还提到了开发者模式、企业账号、设备注册限制以及自定 App 和非公开 App 分发的解决方案。最后,讨论了欧盟的《数字市场法》对苹果的影响和可能改变苹果软件生态的可能性。 20 | 21 | ### 🐎 [云音乐自研客户端 UI 自动化项目-Athena](https://mp.weixin.qq.com/s/CX9j63Wxe8qlvqVMjyRhpg) 22 | 23 | [@老峰](https://github.com/gesantung):本文介绍了云音乐在 UI 自动化测试上的一站式解决方案 Athena,其采用了录制的方式解决传统自动化方案录制门槛高、效率低下的问题,在回放过程中前置准备用例执行环境以及结合曙光埋点提升用例执行的稳定性,并且会保留执行过程中的现场信息以便后续溯因。最后通过私有云部署,在云端即可统一调度 Android 和 iOS 设备来执行任务。 24 | 25 | ### 🐎 [Symbolicating SwiftUI (and any Apple Framework)](https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework) 26 | 27 | [@Damien](https://github.com/ZengyiMa):这篇博客文章介绍了如何使用 Emerge Tools 的开源 ETSymblication 库和 symbolicator 来符号化 SwiftUI 等 Apple 框架。这个过程包括使用 Framework 选择器和两个步骤:线程和偏移量来提取符号。然后,将这些符号以 CSV 格式存储在数据库中,以便在 symbolicator 中引用。文章还详细解释了如何下载和理解崩溃报告,以便从中提取和解释信息。对符号化感兴趣的同学不妨一读。 28 | 29 | ### 🐕 [Trigger property observers from initializers in Swift](https://nilcoalescing.com/blog/TriggerPropertyObserversFromInitializersInSwift/) 30 | 31 | [@Barney](https://github.com/BarneyZhaoooo):本文介绍了几种 workarounds 使得 property observers 在 initialization 阶段也可以被触发。 32 | 简短实用,大家可以选择适合自己的方式。 33 | 34 | - Set properties after initialization 35 | - Separate property setup method 36 | - Create a defer closure 37 | - Manually trigger side effects 38 | 39 | ## 工具 40 | 41 | ### [MacSymbolicator](https://github.com/inket/MacSymbolicator) 42 | 43 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个用于符号化 macOS/iOS 崩溃报告的 Mac 应用程序,可以方便快捷的符号化 crash 和 ips 文件。 44 | 45 | ## 内推 46 | 47 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 48 | 49 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 50 | 51 | ## 关注我们 52 | 53 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 54 | 55 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 56 | 57 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 58 | 59 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 60 | 61 | ## 说明 62 | 63 | 🚧 表示需某工具,🌟 表示编辑推荐 64 | 65 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 66 | -------------------------------------------------------------------------------- /Reports/2024/#274-2024.01.08.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #274 | 2024-01-08 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/274.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐎 [The Art of the Corner Radius](https://david.y4ng.fr/the-art-of-the-corner-radius/) 11 | 12 | [@Barney](https://github.com/BarneyZhaoooo):本篇文章简单介绍了 swiftUI 中 **Corner Radius** 的基础使用,浅显易懂,图文并茂,只需 3 分钟就可以领略“圆角”的艺术。 13 | 14 | ## 文章 15 | 16 | ### 🌟 🐢 [微信业务开发方法与实践](https://mp.weixin.qq.com/s/we4LCGAwDC6bS7rQNztWMQ) 17 | 18 | [@xuyafei86](https://github.com/xiaofei86):在当前竞争激烈的商业环境中,深刻理解业务流程对于开发复杂软件系统至关重要。微信团队万字长文带你拔开迷雾,直达本质,深入理解业务是什么,以及如何挖掘业务价值。 19 | 20 | 本文详细阐释了业务建模的核心概念和方法,并通过支付业务的具体案例进行演示。你将从文中学到如何理解构建的业务系统背后所服务的目标组织,深入其业务流程,找出改进机会。感兴趣的同学可以阅读原文了解。 21 | 22 | ### [尾调用以及如何规避](https://r3zpy9khqv.feishu.cn/docs/doccnCwMGwhIDmMi4miM7VfHqpe) 23 | 24 | [@老峰](https://github.com/gesantung):尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的基本概念以及通过使用 OS_NOT_TAIL_CALLED 规避尾调用的代码优化方式。 25 | 26 | ### [浏览器内核创新技术演进及实践 - U4 5.0](https://mp.weixin.qq.com/s/5xIJIN2nUBN2h6McYFg2FQ) 27 | 28 | [@莲叔](https://github.com/aaaron7):U4 是 UC 基于 Chromium 内核二次开发的浏览器引擎,在阿里内部被广泛的使用。本篇文章介绍了在介绍 U4 的 5.0 新版本特性的同时,也科普了很多浏览器内核相关的技术,比如性能提升的关键模块:渲染引擎与 JS 引擎。移动端目前越来越多的业务通过 H5 来实现,作为客户端的同学多了解一些浏览器引擎的技术对于协助前端做出更优化的体验是很有帮助的。推荐阅读。 29 | 30 | ### [哥伦布即时设计平台 ChatGPT 落地实践](https://mp.weixin.qq.com/s/5BuX1m_GDHQzuW_Kj2siOw) 31 | 32 | [@水水](https://www.xuyanlan.com/):本文介绍了 ChatGPT 在哥伦布即时设计平台应用以及实现原理,通过设计 ChatGPT 交互 DSL、Prompt 与 Function 实现 Ai 智能交互、提高平台搭建效率。即让 AI 通过 DSL 了解即时设计能力,同时输出 DSL 解析执行,设计平台具备以下能力: 33 | 1.画布编辑能力:提供了丰富的画布编辑功能,包括添加、删除、复制、调整层级等操作,可以灵活地编辑页面的结构和布局。 34 | 2.样式配置能力:支持对页面元素的样式进行配置,包括字体、颜色、大小、边框等,可以根据需求进行自定义的样式设置。 35 | 3.数据接口配置能力:支持与数据接口的绑定,可以通过配置数据接口来实现页面内容的动态展示,提高页面的灵活性和可扩展性。 36 | 4.交互事件配置能力:支持对页面元素的交互事件进行配置,包括点击、滑动、弹窗等,可以实现页面的交互效果,提升用户体验。 37 | 5.预览和下载能力:提供了在线预览和下载代码的功能,可以实时查看页面效果,并将设计的页面代码下载到本地进行进一步开发和调试。 38 | 39 | ## 工具 40 | 41 | ### [Unxippity](https://trycombine.com/posts/an-app-experiment-about-unxipping-xcode-goes-to-github/) 42 | 43 | [@Smallfly](https://github.com/iostalks):这是一款 [unxip](https://github.com/saagarjha/unxip) 的可视化开源工具,用于加速下载和解压 Xcode。 44 | 45 | ## 代码 46 | 47 | ### [swift-retry](https://github.com/fumoboy007/swift-retry?tab=readme-ov-file) 48 | 49 | [@AidenRao](https://weibo.com/AidenRao):该项目是一个 Swift 语言的重试库,旨在提供合理的默认设置和强大的灵活性。 50 | 51 | - 合理的默认设置:默认选择[指数退避](https://en.wikipedia.org/wiki/Exponential_backoff)算法,适用于大部分场景,避免对资源进行 DDoS。 52 | - 强大的灵活性:该库提供了多个自定义选项以适应不同的使用场景,包括自定义关闭、重试配置、退避算法选择以及时钟替换等。 53 | 54 | ## 内推 55 | 56 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 57 | 58 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 59 | 60 | ## 关注我们 61 | 62 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 63 | 64 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 65 | 66 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 67 | 68 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 69 | 70 | ## 说明 71 | 72 | 🚧 表示需某工具,🌟 表示编辑推荐 73 | 74 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 75 | -------------------------------------------------------------------------------- /Reports/2024/#275-2024.01.15.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #275 | 2024-01-15 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/275.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐕 [@Observable Macro performance increase over ObservableObject](https://www.avanderlee.com/swiftui/observable-macro-performance-increase-observableobject/) 11 | 12 | [@Barney](https://github.com/BarneyZhaoooo):这篇文章主要介绍 WWDC 2023 中首次公开的 @Observable 宏,这是一个设计精良的工具,旨在优化 SwiftUI 视图并提升应用性能。通过使用 @Observable 我们能有效地防止不必要的视图重绘 , 并更流畅地观察状态变化。尽管使用 @Observable 宏让我们无需再使用 @ObservedObject,ObservableObject 和 @Published,但为了确立模型数据来源仍需依赖 @State。 13 | 14 | ### 🐎 [Perception: A back-port of @Observable](https://www.pointfree.co/blog/posts/129-perception-a-back-port-of-observable) 15 | 16 | [@Smallfly](https://github.com/iostalks):Swift 5.9 引入了强大的观察者工具 @Observable 宏,但仅适用于 iOS 17、macOS 14、tvOS 17、watchOS 10 等新平台。由于少于 50% 的设备运行在 iOS 17 上,大多数开发者需要等待数年才能使用这些工具。[swift-perception](https://github.com/pointfreeco/swift-perception) 提供了在低版本中使用 @Observer 的能力,并且在高于 iOS 17 上会自动使用系统的实现。有需要的读者可以一试。 17 | 18 | ### 🐕 [Adapting your App Icon to visionOS](https://www.createwithswift.com/adapting-your-app-icon-to-visionos/) 19 | 20 | [@享耳先森](https://github.com/iblacksun):Apple Vision Pro 即将发售,如果你的 App 准备适配 visionOS,本文介绍了如何将现有的 App Icon 进行修改已完美匹配 visionOS 规范。 21 | 22 | ### 🐢 [iOS Availability 编译器实现机制解析](https://juejin.cn/post/7316202786173829146) 23 | 24 | [@JonyFang](https://github.com/jonyfang): 文章探讨了 iOS 开发中的 Availability 机制,这是 iOS 编译器提供的一个用于处理不同 iOS 系统版本之间 API 兼容性问题的功能。该机制允许开发人员声明 API 的版本约束,并进行可用性检查来防止在旧版 iOS 系统上调用不存在的新 API,从而避免应用崩溃。然而,作者通过研究 Clang 和 Swift 编译器源码指出,Availability 的检查只局限于方法内部的直接调用,不能保证完全的运行时安全性。 25 | 26 | ### 🐕 [Encrypted Portals between Macs – built in Swift and Rust](https://github.com/build-trust/ockam/blob/develop/examples/app/portals/README.md) 27 | [@水水](https://www.xuyanlan.com/):Portals 是一款 Swift 开发的 Mac 应用程序。它使用 Ockam Rust 库在 Mac 上与任何人、任何地方私下共享服务。该服务通过端到端加密的 Ockam 门户进行安全共享。你的朋友将可以在他们的本地主机上访问它! 28 | 29 | 30 | ## 代码 31 | 32 | ### 🐎 [Missing compiler warning](https://github.com/apple/swift/issues/70630) 33 | 34 | [@Cooper Chen](https://github.com/cjlcooper):在 Swift 中,当 override 函数 / 方法具有相同名称但有更多参数,并且这些参数获得默认值时,理论上编译器会对这样的写法产生一个 waring,但是实际开发中并没有出现预期的警告,这个 issue 解释了以上行为的 root cause,并且提出可以使用 `let _ = Printable.init(from:as:)("Sebastian")` 这样的写法,同时也可以对 init 方法增加 `@_disfavoredOverload` 关键字的写法,但需要提醒的是,并不推荐这样的用法,但这为有类似 case 的开发者提供很好的思路。 35 | 36 | 37 | ## 内推 38 | 39 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 40 | 41 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 42 | 43 | ## 关注我们 44 | 45 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 46 | 47 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 48 | 49 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 50 | 51 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 52 | 53 | ## 说明 54 | 55 | 🚧 表示需某工具,🌟 表示编辑推荐 56 | 57 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 58 | -------------------------------------------------------------------------------- /Reports/2024/#276-2024.01.22.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #276 | 2024-01-22 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/276.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐕 [Bad practice: using "YYYY" to format a Date](https://www.swiftwithvincent.com/blog/bad-practice-using-yyyy-to-format-a-date) 11 | 12 | [@极速男孩](https://github.com/ztlyyznf001):文章讲述了在 Swift 编程语言中关于日期格式化的一个常见错误。"YYYY" 实际上表示的是该周开始的年份,这会导致新年初几天的日期显示不正确。例如,2023 年 1 月 1 日会错误地显示为 2022 年。这个错误通常在新年开始时才被注意到。正确的年份格式化方法应该使用 "yyyy" ,以确保准确表示日历年份​​。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [在微信小程序里运行完整的 Flutter,我们是怎么做到的?](https://juejin.cn/post/7324923422295670834) 17 | 18 | [@邦 Ben](https://github.com/linwenbang):MPFlutter 是一个跨平台 Flutter 开发框架,可用于各种小程序、H5、原生应用开发。这类跨平台开发,在一些中小型的开发场景来说,可以提高比较大的效率。本文主要介绍一下在微信小程序上实现的原理,通过裁剪 Skia 生成符合微信小程序分包要求的 CanvasKit,使用 Flutter Web + W3C BOM + WebGL Canvas 跑通渲染流程,通过字体内置、智能分包的方式很好地解决了微信包体积限制。选型的过程也有介绍,有兴趣的同学可以仔细看看,也可以基于官网流程体验尝试。 19 | 20 | 参考链接:[官网](https://mpflutter.com/zh/) 21 | 22 | ### 🐢 [Swift for C++ Practitioners, Part 1: Intro & Value Types](https://www.douggregor.net/posts/swift-for-cxx-practioners-value-types/) 23 | 24 | [@AidenRao](https://weibo.com/AidenRao):这个系列主要是通过将 C++ 的习惯用法、模式和思维模型映射到 Swift 中来帮助 C++ 开发学习和使用 Swift。如果你是一位 C++ 背景的开发,阅读 [Swift 入门指南](https://www.swift.org/getting-started/) 中有比较多的困惑,那可以尝试一下该系列,能帮助你更好的理解和应用 Swift。 25 | 26 | ### 🐕 [VisionPro News](https://developer.apple.com/news/?id=8fppguuh) && [Q&A: Building apps for visionOS](https://developer.apple.com/news/?id=prl6dp5r) 27 | 28 | [@EyreFree](https://github.com/EyreFree):在这两篇文章中,Apple 专家回答了关于 visionOS 的常见问题,涵盖了如何与实体互动、选择窗口组或沉浸式空间、可视化碰撞形状、在沉浸式空间中定位 SwiftUI 视图、编程定位窗口、用户关注点追踪、onHover 和 onContinuousHover 动作、自定义沉浸式环境纹理、视频格式转换、RealityKit 照明和材料自定义等方面。介绍了 Apple Vision Pro 的 App Store,Algoriddim 公司为 visionOS 设计的适应无限画布的 App djay,以及 Apple Vision Pro 工程师的常见问题解答。文章还提及了重塑企业应用、提供开发实验室和 App Review 咨询服务,以及 visionOS 的示例应用、SwiftUI 教程和音频性能更新资源。 29 | 30 | ### 🐎 [AnyView ’ s impact on SwiftUI performance](https://martinmitrevski.com/2024/01/02/anyviews-impact-on-swiftui-performance/) 31 | 32 | [@东坡肘子](https://github.com/fatbobman):本文探讨了在 SwiftUI 中使用 AnyView 对性能可能造成的影响。AnyView 作为一种类型擦除视图,使得开发者无需明确指定视图层次结构中各个视图的具体类型,从而简化了代码的复杂度,避免了泛型的频繁使用。然而,这种方便性可能以牺牲性能为代价。 33 | 34 | 作者 Martin Mitrevski 通过精心设计的测试代码,直观地展示了 AnyView 在 SwiftUI 中所造成的性能影响。文章特别指出,在包含大量子视图的滚动列表等场景中,应谨慎使用 AnyView,以避免不必要的性能下降。 35 | 36 | > 介绍摘自 [Fatbobman's Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-014),推荐订阅! 37 | 38 | ### 🐎 [闲话 APPLE 的 APP REVIEW 趣事](https://sketchk.xyz/posts/secret-of-app-review-team) 39 | [@Smallfly](https://github.com/iostalks):这篇文章探讨了一些 iOS App Review Team 内部的运作机制,展示了 App 常见的拒审原因,并为审核申述提供了一些思路,推荐给提交 App Store 审核遇到问题的开发者阅读。 40 | 41 | ### 🐎 [std:: versus ::std::](https://mp.weixin.qq.com/s/QwhBdUZbmGFiUP_ssomXUQ) 42 | 43 | [@老驴](https://weibo.com/u/6090610445):最近一段时间原生鸿蒙开发的热度在升温,而开发原生鸿蒙主要用 C++,而 C++ 这么多年下来也一直热度不减。C++ 开发中,作用域这个概念一直对新手不是很友好,尤其是怎么理解在什么情况下用哪种作用域。这篇文章就可以很好的帮你理解作用域这个概念。 44 | 45 | ## 内推 46 | 47 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 48 | 49 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 50 | 51 | ## 关注我们 52 | 53 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 54 | 55 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 56 | 57 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 58 | 59 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 60 | 61 | ## 说明 62 | 63 | 🚧 表示需某工具,🌟 表示编辑推荐 64 | 65 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 66 | -------------------------------------------------------------------------------- /Reports/2024/#277-2024.01.29.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #277 | 2024-01-29 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/277.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [Update on apps distributed in the European Union](https://developer.apple.com/support/dma-and-apps-in-the-eu/) 11 | 12 | [@老驴](https://weibo.com/u/6090610445):iOS 17.4 beta 上周上线了,其中最大的变化是因为欧盟 DMA 政策,苹果在欧盟再次做出重大让步,做出了 “违背祖宗” 的决定。 具体来说,有几个重大变化: 13 | 14 | 1. 第三方应用商店:在欧盟,苹果将允许 App 通过第三方商店进行分发. 15 | 2. Webkit 外的浏览器内核:长期以来,苹果限制 iOS 上的第三方浏览器必须使用 Webkit 内核,从 17.4 开始,这会在欧盟成为过去式。 16 | 3. NFC API 和支付的开放:欧盟开发者有更多的 NFC 相关的 API,包括很多人期待的模拟 NFC 卡。 17 | 4. App Store 多种支付方式:App Store 将不再限制支付方式. 18 | 19 | 这里面其实有很多改变是很多人一直期盼但是却一直不得的。这些改变将让 iOS 在欧盟成为更开放的移动操作系统。当然,仅限欧盟,目前还不知道其他地区的用户是不是可以模拟成欧盟用户,但是按照传统,应该不容易。 20 | 21 | PS:工信部是不是该出手了?! 22 | 23 | ### [Apple introduces new options worldwide for streaming game services and apps that provide access to mini apps and games](https://developer.apple.com/news/?id=f1v8pyay) 24 | 25 | 苹果放开了对于串流 APP 的限制,利好 Xbox Cloud Gaming / Nvidia GeForce NOW 上架单独的串流 APP ;同时苹果对于 mini-games / mini-apps / chatbots 类型的应用开放 iAP 内购渠道,相较之前的态度还是略有放宽,也可能是顺应 GPT Shore 的潮流。 26 | 27 | 同时苹果为开发者准备了 50 多个新的的可视化图表以及分析报告,可以查看 用户的参与度,下载销售相关的收益,安装卸载程序时的附加信息等。同时这些信息预计在 3 月上线,届时还可以通过 API 向第三方授权这些分析报告。 28 | 29 | ## 文章 30 | 31 | ### 🐎 [A new access modifier in Swift: package](https://blog.eidinger.info/a-new-access-modifier-in-swift-package) 32 | 33 | [@AidenRao](https://weibo.com/AidenRao):在 Swift 5.9 中,苹果引入了一个新的访问级别:package,在软件包内的模块之间共享代码,同时不将该代码分享给软件包外部。目前 package 只支持源代码构建的软件包,对于二进制框架有望在未来支持。 34 | 35 | ### 🐢 [Exploring object file formats](https://maskray.me/blog/2024-01-14-exploring-object-file-formats) 36 | 37 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章的主要内容是关于目标文件格式的探讨。作者从自己在 LLVM 项目中的经历出发,深入研究了 lld 和二进制实用程序,并在此过程中对目标文件格式产生了浓厚的兴趣。文章介绍了目标文件格式的核心组件,如符号、节和重定位,并回顾了几种主要目标文件格式的历史和演变。通过了解不同格式的特点和限制,可以更好地理解它们在软件开发和部署中的作用。 38 | 39 | ## 内推 40 | 41 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 42 | 43 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 44 | 45 | ## 关注我们 46 | 47 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 48 | 49 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 50 | 51 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 52 | 53 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 54 | 55 | ## 说明 56 | 57 | 🚧 表示需某工具,🌟 表示编辑推荐 58 | 59 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 60 | -------------------------------------------------------------------------------- /Reports/2024/#279-2024.03.04.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #279 | 2024-03-04 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/279.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### [How to make a completionHandler much safer ](https://www.swiftwithvincent.com/blog/how-to-make-a-completionhandler-much-safer) 11 | 12 | [@zoeGuo](https://github.com/zoeGuo):我们经常会用 completionHandler 来处理异步事件,但是很难保证所有逻辑下都能执行到 completionHandler 的逻辑。那么在 Swift 语法中可以使用 defer 关键字,defer 可以确保 completionHandler 在方法返回之前一定被调用,编译器会检查在每个可能的代码路径中都能顺利执行到 completionHandler。原文有更详细的代码示例说明,还有视频讲解。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [从入门到精通:如何解决 C++ 模板代码膨胀问题](https://mp.weixin.qq.com/s/aRqKGoVNcf8yzRhIHbmoBA) 17 | 18 | [@老峰](https://github.com/gesantung):C++ 模板是一种强大的编程工具,它允许我们编写通用的、可重用的代码,本文介绍了通过模板函数提取通用部分;模板类抽象出通用部分到基类,合理使用模版等优化策略提高编译速度,减少二进制文件大小解决代码膨胀问题。 19 | 20 | ### 🐎 [Swift 6.0 Release Process](https://forums.swift.org/t/swift-6-0-release-process/70220) 21 | 22 | [@AidenRao](https://weibo.com/AidenRao):Swift 社区公布了 Swift 6 的发布流程及预期时间表。2024 年 3 月 15 日,将从 Swift 主分支中切出 release/6.0 分支开启发布流程,正式版本预计将于今年下半年与新版 Xcode 同步发布。 23 | 24 | ### 🐎 [ImGui 在长桥跨端图表组件中的探索与应用](https://mp.weixin.qq.com/s/-_NLEbonjEl1F2kyA0yx_A) 25 | 26 | [@Smallfly](https://github.com/iostalks):长桥技术团队在 iOS App 中升级 K 线图表组件,面临业务复杂度高、两端重复开发等问题。在对比各种成熟跨端方案之后,他们选择了 ImGui 作为跨平台解决方案,利用其 GPU 渲染和简单 API 实现高性能图表。它使用各平台支持最好的渲染框架,有着完善的图表绘制能力,即使加载大量数据,在多个平台上依然有流畅体验。 27 | 28 | ### 🐢 [天美引擎工程师:如何使用移动端硬件特性提升游戏上限?](https://zhuanlan.zhihu.com/p/587988966) 29 | 30 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):在 Unreal Open Day 2022 上,腾讯天美工作室的引擎工程师王烁分享了如何使用移动端硬件特性提升游戏渲染效果。他提出,利用硬件特性如 VRS(可变着色率渲染)等可以有效解决移动端渲染中的常见问题。将渲染分为应用图形学算法、渲染管线、图形 API 层和 GPU 驱动层四层,并强调了了解这些层级对于手游开发的重要性。了解硬件特性如 Vulkan 中的 VRS 和 Hidden-surface removal 等可以帮助开发者针对目标机型选择适当的特性,从而提升游戏渲染效果。通过利用这些硬件特性,游戏开发者可以在保证游戏性能的同时,提高游戏画面质量,从而提升游戏体验。王烁的分享为游戏开发者提供了一种新的思路和方法,对于提升游戏上限具有重要的指导意义。 31 | 32 | ### 🐕 [try catch 失效排查 - 探索异常处理机制的迷雾](https://mp.weixin.qq.com/s/MK26EcuVS2GFOjocgvvetA) 33 | 34 | [@xuyafei86](https://github.com/xiaofei86):C++ 异常处理机制 try catch 在快手 App 内突然失效,引发大量未捕获异常导致的崩溃。本文介绍稳定性团队排查此次问题的过程,问题的根本原因以及修复规避方案,最后梳理异常处理流程,知其然,知其所以然,方能在问题出现时冷静应对。感兴趣同学可以阅读原文了解。 35 | 36 | ### 🐕 [How the Swift compiler knows that DispatchQueue.main implies @MainActor](https://oleb.net/2024/dispatchqueue-mainactor) 37 | 38 | [@Barney](https://github.com/BarneyZhaoooo):文章讨论了 Swift 编译器如何识别 DispatchQueue.main 为 `@MainActor`,这是通过检查源代码实现的。当使用 DispatchQueue.main.async 时,系统会自动将其视为 `@MainActor`,这使得在主线程上执行并发任务变得方便。然而,这种行为并未在 Xcode 等 IDE 中明确显示出来,作者希望能直观显示 `@MainActor` 和相关并发信息,以便更好地理解和学习 Swift。 39 | 40 | ### 🐎 [ARM 汇编系列](https://www.lyldalek.top/6cd918093215420e8e980db08e9a8ba0) 41 | 42 | [@Crazy](https://github.com/jiyan135960):汇编是客户端开发人员很少接触的一个方面,一般在 Android 开发人员也只有 ndk 开发者会接触到,汇编看似无用,但却是性能优化最底层的核心,了解汇编是程序员非必备,但是很需要的技能。本次推荐的博客是一个系列,在这个汇编中文博客很少的当下,这个系列可以说是很好的解决了大家入门困难的问题。本系列从环境搭建开始,到各种指令的介绍,把汇编基础用图片加代码整合起来,简单明了的讲解给大家,有需要汇编入门的同学可以仔细学习。 43 | 44 | ## 内推 45 | 46 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 47 | 48 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 49 | 50 | ## 关注我们 51 | 52 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 53 | 54 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 55 | 56 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 57 | 58 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 59 | 60 | ## 说明 61 | 62 | 🚧 表示需某工具,🌟 表示编辑推荐 63 | 64 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 65 | -------------------------------------------------------------------------------- /Reports/2024/#282-2024.03.25.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #282 | 2024-03-25 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/282.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | [Cocoapods 之版本号问题](https://mp.weixin.qq.com/s/ghSD_wbfRuYse64m9TmBKw) 11 | 12 | [@zoeGuo](https://github.com/zoeGuo):文章是一篇关于 Cocoapods 版本号使用的一个建议:要注意使用标准化的版本号,不要在主干分支使用 prerelease 版本号。原因是 Podfile 中强指定一个库的版本号,如果是一个 prerelease 版本号,最终依赖的不一定是这个版本,这其中的不确定性便来于 Cocoapods 底层对 prerelease 版本的处理策略。文中解释了 Cocoapods 如何判断 Source 里面的版本是否满足依赖要求的,可以配合[语义化版本号规范](https://semver.org/)一起阅读。 13 | 14 | ## 文章 15 | 16 | ### 🌟🐕 [Apple 也在用的 Benchmark 框架](https://www.swift.org/blog/benchmarks/) 17 | 18 | [@kemchenj](https://kemchenj.github.io/):这篇文章介绍了一个专为 Swift 编写的 Benchmark 包,除了支持追踪常用的 CPU 时间和内存占用情况,还支持了 ARC 相关的数据,swift-foundation 之类的 Apple 官方开源项目也都在使用。 19 | 20 | 另外 [Benchmark 的文档](https://swiftpackageindex.com/ordo-one/package-benchmark/1.22.4/documentation/benchmark/gettingstarted)也写得非常好,手把手教你生成 baseline,生成可视化图表,甚至连 GitHub CI 的 workflow 都教你怎么写,直接评论到 PR 上看对比结果。 21 | 22 | ### 🐢 [A Gentle Introduction to LLVM IR](https://mcyoung.xyz/2023/08/01/llvm-ir/) 23 | 24 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文由浅入深地介绍了 LLVM IR 的一些基本常识和概念,并给出了相关例子。 25 | 26 | - % 和 @ 的在 LLVM IR 中的含义 27 | - LLVM IR 的类型表示 28 | - CFG 和不可达优化等 29 | 30 | 了解 LLVM IR 的主要用途是,在进行性能优化时,介于源代码和汇编代码之间的 LLVM IR 可能会是更方便的选择。 31 | 32 | ### 🐎 [Swift Tooling: Windows Edition](https://speakinginswift.substack.com/p/swift-tooling-windows-edition) 33 | 34 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 Arc 公司所推动 Swift on Windows 的最新进展和一些他们的开发体验分享 35 | 36 | - 🔨 开发环境 : VSCode 是 Swift on Windows 上的首选开发环境。 37 | - ✍️ 代码编辑 : VSCode IDE 目前已提供了代码补全、导航和错误显示功能等功能。 38 | - 🧪 构建和测试 : 支持通过 Swift Package Manager 和 CMake 进行构建和测试。 39 | - 🐛 调试能力 : LLDB 调试和命令行调试目前都已支持。 40 | 41 | ### 🐢 [Nerdy internals of an Apple text editor ](https://papereditor.app/internals) & [ 9 years of Apple text editor solo dev](https://papereditor.app/dev) 42 | 43 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):作者作为一位全栈 Web 开发者,出于对 Mac 上独特应用程序生态系统的热爱,踏上了制作 Mac 原生文本编辑器的旅程。经过两年的努力,成功推出了名为 Paper 的 Mac 应用程序,随后又将其扩展到了 iOS 平台。作者尤其注重用户体验和应用程序的稳定性,因此选择了开发本土应用,充分利用了 Xcode、AppKit 和 Objective-C 等技术的优势。 44 | 45 | 正是作者的坚持和追求,使得 Paper 文本编辑器得以诞生并逐渐完善。而当我们深入了解 Paper 背后的工程细节时,不禁为作者的专业素养和技术实力所折服。Paper 的核心组件 TextView,通过 NSTextStorage、NSTextContainer 和 NSLayoutManager 等旗舰类的协同工作,实现了流畅而高效的文本编辑体验。这些技术细节不仅展示了作者的精湛技艺,更是他对用户体验极致追求的体现。 46 | 47 | ### 🐕 [lsregister: How Files Are Handled in Mac OS X](https://krypted.com/mac-security/lsregister-associating-file-types-in-mac-os-x/) 48 | 49 | [@Barney](https://github.com/BarneyZhaoooo):这篇文章主要讲述了如何使用 lsregister 命令管理 Mac OS X 中的 Launch Services 数据库,这个数据库决定了文件的默认打开方式。文章详细介绍了如何查询、导出、强制重新注册文件类型、取消应用程序的注册等操作,以及如何关闭文件类型默认被隔离的功能。同时,文章也指出了清理和重建大规模数据库的方法,以及如何指定某应用打开特定文件类型或网络协议。 50 | 51 | ### 🐕 [Sending trial notifications with provisional authorization on iOSX](https://nilcoalescing.com/blog/TrialNotificationsWithProvisionalAuthorizationOnIOS/) 52 | 53 | [@享耳先森](https://github.com/iblacksun):Push 是很好的吸引用户注意的方式,但难点是如何获取用户的授权,本文介绍了 `provisional notifications` 这一通知机制。 54 | 55 | ## 内推 56 | 57 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 58 | 59 | [杭州] 淘宝 - Meta 技术团队 - iOS 工程师 / Vision Pro 工程师 (校招) 60 | 61 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 62 | 63 | ## 关注我们 64 | 65 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 66 | 67 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 68 | 69 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 70 | 71 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 72 | 73 | ## 说明 74 | 75 | 🚧 表示需某工具,🌟 表示编辑推荐 76 | 77 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 78 | -------------------------------------------------------------------------------- /Reports/2024/#284-2024.04.08.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #284 | 2024-04-08 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/284.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 [Generate and read analytics reports from the App Store Connect API](https://www.polpiella.dev/analytics-reports-api-app-store-connect) 11 | 12 | [@Smallfly](https://github.com/iostalks):这篇文章介绍了苹果公司最近推出的 50 多种新的分析报告,这些报告包括应用商店参与度、应用商店商务、应用使用情况、框架使用情况和性能等方面的数据。虽然这些新数据提供了很多洞察力,非常有价值,但它们仅通过 App Store Connect API 独家提供,而且获取数据的方式并不直观。文章中介绍了如何使用 App Store Connect Swift SDK 来访问这些新的指标。如果对该方式感兴趣,值得一读。 13 | 14 | ### 🐕 [Swift Isolation Intuition](https://www.massicotte.org/isolation-intuition) 15 | 16 | [@DylanYang](https://github.com/Dylan19Yang):本文详细介绍了 Swift 并发框架中的隔离(Isolation)概念,作者通过一系列的例子阐述了如何判断当前代码上下文的隔离状态。关于隔离,作者总结了三条规律: 17 | 1. 隔离状态是在方法、数据结构、变量等声明时就确定的 18 | 2. 隔离状态只会被 async 改变 19 | 3. protocal 也可以声明隔离状态 20 | 21 | 同时应当牢记隔离状态是一个编译时的声明,运行时的状态并不重要,即使一段代码在运行时只会跑在主线程上也不代表它是一段主线程隔离(MainActor-isolated)的代码。 22 | 23 | 本文在书写过程中假设读者已经对 swift 并发的基础概念(Actor、Task 等)有了一些了解,建议未接触过 Swift 并发的读者可以简单了解下这几个概念后再阅读此文。 24 | 25 | ### 🐢 [Near real-time UI code generation on iPad](https://otaku.codes/uni/dissertation/dissertation.pdf) 26 | 27 | [@BluesJiang](https://github.com/BluesJiang): 本论文展示了如何利用 YOLO 模型实现从草图到 SwiftUI 代码的流程。详细说明了从数据收集处理、模型训练以及利用 CoreML 实现单机完成部署投放。这里利用 iPad 强大的绘画、机器学习、SwiftPlayground 的能力,可以充分的展示这种可能性。具体展示的效果可以查看 [Demo 视频](https://www.youtube.com/watch?v=SKGdZ3H9eyY)。这篇论文很好的展示了机器学习实践的完整流程,值得学习。 28 | 29 | ### [理解 C++ 的六种 Memory Order](https://lancern.xyz/2021/07/07/cpp-memory-order/) 30 | 31 | [@老驴](https://weibo.com/u/6090610445):本文详细介绍了 C++11 中引入的六种内存顺序(memory order)的概念,目的是解决多线程环境下的数据一致性和可见性问题。内存顺序包括: 32 | 33 | Relaxed:不保证顺序性的最宽松内存顺序。 34 | Consume:保证读操作能看到数据依赖的写操作。 35 | Acquire:确保读操作可以看到在相应 release 操作之前的所有写操作。 36 | Release:确保写操作之前的所有操作对其他线程可见。 37 | Acquire-Release:同时包含 acquire 和 release 语义。 38 | Sequential Consistent:所有线程看到一致顺序操作的最严格内存顺序。 39 | 40 | 想要了解 C++ 内存的话,值得一读。 41 | 42 | ### 🐕 [Using @_silgen_name to forward declare functions in Swift and improve build times](https://swiftrocks.com/using-silgenname-to-call-private-swift-code) 43 | 44 | [@Cooper Chen](https://github.com/cjlcooper):文章介绍了使用 `@_silgen_name` 属性在 Swift 中前向声明函数以及改善构建时间的方法。作者强调了谨慎使用这一技巧的重要性,并解释了其工作原理和潜在风险。通过示例和技术细节,文章展示了如何使用该属性来提高 Swift 应用程序的构建效率,尽管牺牲了一些类型安全性。最后,作者呼吁 Swift 支持更多类似的功能,以满足开发者对更多控制和灵活性的需求。这对于需要提升 Swfift 编译速度相关内容的开发者有一定的参考价值。 45 | 46 | ### 🐕 [lldb remove randomness](https://bryce.co/lldb-remove-randomness/) 47 | 48 | [@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何使用 LLDB 调试器去除调试第三方应用时的随机性。通过一个示例程序,演示了生成随机数据并打印出来的过程。文章重点在于展示如何通过设置 LLDB 断点和特定命令,强制 randomData 函数返回固定长度和内容的数据,从而消除随机性。作者分步骤说明了如何先返回固定大小的数据,然后是动态大小但固定数据,最终是动态大小且看似随机但实际一致的数据。这一技巧在需要调试包含随机元素的程序时非常有用,能够提高调试的效率和准确性。 49 | 50 | 51 | ## 内推 52 | 53 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 54 | 55 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 56 | 57 | ## 关注我们 58 | 59 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 60 | 61 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 62 | 63 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 64 | 65 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 66 | 67 | ## 说明 68 | 69 | 🚧 表示需某工具,🌟 表示编辑推荐 70 | 71 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 72 | -------------------------------------------------------------------------------- /Reports/2024/#286-2024.04.22.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #286 | 2024-04-22 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/286.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐕 [Xcode Bookmarks](https://useyourloaf.com/blog/xcode-bookmarks/) 11 | 12 | [@Barney](https://github.com/BarneyZhaoooo):Xcode 15 引入了一种新的代码注释和搜索查询书签功能,用户可以通过选择代码行并使用上下文菜单来创建书签,还可以对书签添加描述、分组和标记完成状态,以及保存搜索查询。这项新功能提高了代码注释和搜索结果的管理效率。 13 | 14 | ## 文章 15 | 16 | ### 🐎 [How to define a custom file header for a Swift Package](https://danielsaidi.com/blog/2024/03/21/how-to-define-a-custom-file-header-for-a-swift-package) 17 | 18 | [@zoeGuo](https://github.com/zoeGuo):开发过程中代码的文件头可以包含一些必要信息,Xcode 一般会为我们生成默认的文件头,想要自定义文件头,应该怎么做呢?文章描述了如何为 Swift 包定义一个自定义的文件头,在本地 ` /.swiftpm/xcode/package.xcworkspace/xcshareddata` 目录下添加一个 `IDETemplateMacros.plist` 文件即可,文中例举了 IDETemplateMacros 文件写法。 19 | 20 | ### 🐕 [Actor reentrancy in Swift explained](https://www.donnywals.com/actor-reentrancy-in-swift-explained/) 21 | 22 | [@Cooper Chen](https://github.com/cjlcooper):本文深入解析了 Swift 中的 actor 重入性,这是管理 actor 内并发任务的关键概念。虽然 actor 确保单线程执行,但异步函数带来的挑战在于它们不总是 atomic 地执行。作者通过示例,说明了同时从本地和远程源读取数据可能导致意外结果的原因,而解决方案涉及管理任务以防止冗余网络调用。作者重点提及了在 actor 的异步方法中考虑重入性以避免错误的重要性,因此理解和解决重入性相关问题对于有效地管理并发至关重要,同时作者强调需要谨慎考虑并采用个性化的解决方案来处理重入性问题。 23 | 24 | ### 🐎 [Splitting Up a Monolith: From 1 to 25 Swift Packages](https://ryanashcraft.com/splitting-up-a-monolithic-swift-package/) 25 | 26 | [@Smallfly](https://github.com/iostalks):这篇文章分享了作者如何将一个大型 Swift 包重构为 25 个较小的包。这个过程中,他解决了对 iCloud 的依赖、代码共享的复杂性、SwiftUI 预览和编译时间问题。通过创建抽象层和依赖注入,成功解耦了核心模型和 CloudKit。 27 | 28 | 重构后,他将包分为纯可重用和特定于 Foodnoms 的两类,提高了代码的模块化和可测试性。虽然面临日志记录的挑战和应用包大小增加,但整体性能提升,SwiftUI 预览也变得更实用。重构思路具有一定的借鉴意义。 29 | 30 | ### 🐕 [Fetching OSLog Messages in Swift](https://useyourloaf.com/blog/fetching-oslog-messages-in-swift/) 31 | 32 | [@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何在 iOS 应用程序中使用 OSLog 框架实时检索日志。文章通过导入 OSLog 框架和创建 Logger 对象来开始,并说明了如何在应用的不同区域生成日志。关键部分涉及使用 OSLogStore 以及如何设置起始位置和使用 NSPredicate 进行日志过滤,以提高性能。文章还讨论了使用 OSLogStore 时遇到的一些限制,如检索速度慢,并推荐了 Apple 的 SwiftLog 作为替代方案。最后,提供了一个展示日志的 SwiftUI 视图示例,说明了如何异步获取并显示日志。 33 | 34 | 35 | ### 🐎 [Bar Chart creation using Swift Charts](https://www.avanderlee.com/swift-charts/bar-chart-creation-using-swift-charts/) 36 | 37 | [@DylanYang](https://github.com/Dylan19Yang):本文介绍了 Swift Charts 的一些基础用法, Swift Charts 能够帮助开发者更便捷的呈现图表数据。作者以 Xcode 的编译数据作为示例,展现了如何通过 Swift Charts 构建一个柱状图,并能够调整柱状图的展示范围。同时通过 `foregroundStyle`、`chartForegroundStyleScale` 等 modifier, 我们也能轻松的对柱状图进行分组、改变柱状图颜色等操作。 38 | 39 | 40 | ### 🐕 [QQ 9 “傻快傻快”背后的技术秘密](https://mp.weixin.qq.com/s/nVXE0iSllZ3rFei4t7bR7g) 41 | 42 | [@JonyFang](https://github.com/JonyFang):本篇介绍了 QQ 9 丝滑背后的技术实现,从启动速度,页面刷新,差异算法,预加载和回收,异步布局和渲染等方面介绍了手 Q 在性能方面做的全流程优化,并介绍了几个用户体验提升的场景表现。每一项优化点深入后内容相对复杂,都可以单独拎出来展开说明,文中也提到后续会慢慢分享出来。 43 | 44 | 45 | ## 工具 46 | 47 | ### 🐎 [Mac App 原生内置 Debug 菜单](https://mjtsai.com/blog/2024/03/22/_eventfirstresponderchaindescription/#comment-4059578) 48 | 49 | [@BluesJiang](https://github.com/BluesJiang):这个是开发 Mac App 的隐藏 Debug 菜单。使用 `UserDefaults.standard.setValue(true, forKey: "_NS_4445425547")` 开启。 50 | 开启后会在菜单栏里出现一个 🐞 菜单。这个菜单不依赖 Xcode,跟随 App 启动而启动。它提供了很多方便的辅助,比如 Responder 打印、View Bounds 展示、改变 Appearance 等。推荐尝试。 51 | 52 | ## 内推 53 | 54 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 55 | 56 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 57 | 58 | ## 关注我们 59 | 60 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 61 | 62 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 63 | 64 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 65 | 66 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 67 | 68 | ## 说明 69 | 70 | 🚧 表示需某工具,🌟 表示编辑推荐 71 | 72 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 73 | -------------------------------------------------------------------------------- /Reports/2024/#287-2024.04.29.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #287 | 2024-04-29 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/287.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | 9 | ## 文章 10 | 11 | ### 🐕 [RxSwift 6 更新了什么](https://juejin.cn/post/7345687862530113546) 12 | 13 | [@zoeGuo](https://github.com/zoeGuo):这是一篇 [What's new in RxSwift 6 ? 14 | ](https://dev.to/freak4pc/what-s-new-in-rxswift-6-2nog) 的译文,文章介绍了 RxSwift 6 的新特性和重要更新,如将 `Binder` 从 RxCocoa 迁移到 RxSwift、使用 `@dynamicMemberLookup` 自动建立 Binders、新的 `withUnretained` 运算符,以及一些运算符重命名 15 | 等。无论你是 RxSwift 的新手还是老手,这篇文章都能提供给你大量有价值的信息,帮助你更好地利用 RxSwift 提升开发效率。 16 | 17 | 18 | ### 🐕 [SwiftUI: Custom View Transition(Navigation) With Matched Geometry](https://blog.stackademic.com/swiftui-custom-view-transition-nav-with-matched-geometry-032552356fc5) 19 | 20 | [@Damien](https://github.com/ZengyiMa):文章主要讨论了如何在 SwiftUI 中使用 matchedGeometryEffect 来自定义视图转换。例如,如何动画化文本的位置,如何以不同的方式动画化多个视图,如何创建一个放大效果等等动画。文章还详细介绍了如何在视图上使用 matchedGeometryEffect 来替换当前的 NavigationStack,这篇文章为那些希望在 SwiftUI 中自定义视图转换的开发者提供了一种新的可能性。 21 | 22 | ### 🐕 [Swift 6 upgrade Preparation](https://medium.com/jamf-engineering/swift-6-upgrade-preparation-0941fbea2db6) 23 | 24 | [@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何在 Xcode Project 项目和 Swift Package Manager 项目中如何逐步采用 Swift 6 模式的部分功能,以便为即将到来的 Swift 6 做好准备。除此之外,本文也介绍并讨论了如何处理一些常见的迁移问题,如 Actor 相关的各种报错。 25 | 26 | 完整的 Swift Features 清单可以通过以下 Gist 中提供的脚本获取: 27 | 28 | - https://gist.github.com/ole/478874632fca61869928a0cc0a956972#file-swift-list-features-sh 29 | 30 | ## 工具 31 | 32 | ### 🐎 [Periphery](https://github.com/peripheryapp/periphery) 33 | [@Smallfly](https://github.com/iostalks):Periphery 一款专门用于识别 Swift 项目中未使用代码的工具。通过分析项目的源代码,帮助开发者发现并删除那些在项目中没有被引用的代码部分,从而精简代码库,提高代码的可维护性。 34 | 35 | ### 🐕 [Copilot For Xcode](https://github.com/intitni/CopilotForXcode) 36 | 37 | [@Cooper Chen](https://github.com/cjlcooper):Copilot for Xcode 是一个 Xcode 源代码编辑器扩展,为 Xcode 提供 GitHub Copilot、Codeium 和 ChatGPT 支持,包括以下功能: 38 | - 代码建议(由 GitHub Copilot 和 Codeium 提供支持)。 39 | - 聊天(由 OpenAI ChatGPT 提供支持)。 40 | - 提示代码(由 OpenAI ChatGPT 提供支持)。 41 | - 自定义命令将聊天和提示扩展为代码。 42 | 建议开发者都可以尝试使用这个拓展工具,能够大大提高工作效率。 43 | 44 | ## 内推 45 | 46 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 47 | 48 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 49 | 50 | ## 关注我们 51 | 52 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 53 | 54 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 55 | 56 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 57 | 58 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 59 | 60 | ## 说明 61 | 62 | 🚧 表示需某工具,🌟 表示编辑推荐 63 | 64 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 65 | -------------------------------------------------------------------------------- /Reports/2024/#291-2024.06.03.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #291 | 2024-06-03 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/291.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 明天我们就将推送 《WWDC24 内参》的报名信息,希望参与创作的同学不要错过哦~ 7 | 8 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 9 | 10 | ## 文章 11 | 12 | ### 🌟 🐕 [深入理解内存分配](http://djs66256.github.io/2018/04/04/2018-04-04-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D/) 13 | 14 | [@莲叔](https://github.com/aaaron7):内存问题一直是 iOS 平台上最常见的稳定性问题,尤其在以 OC 为主的应用中。我们在排查野指针崩溃的问题时遇到的难点往往是崩溃点和问题点往往不在一起。这篇文章通过分析 iOS 平台内存分配的原理来非常严谨的解释了这个现象的原因,非常值得大家学习。之后作者还提出了一种定制内存分配策略的实现方式,对于精细化的性能分析或者特定应用场景分配优化都是不错的方向。 15 | 16 | ### 🐕 🌟 [Tricking iOS Into Animating App Icons](https://bryce.co/animated-app-icons/#the-problems) 17 | 18 | [@水水](https://www.xuyanlan.com/categories/iOS/):如何让你的 APP 图标动起来?这是一个很有意思的事情,文本作者从系统提供的切换 APP 图标 的 API 实现中,一步步通过反编译,解决了弹框提醒、进入后台等问题,实现了 APP 的动态图标。并附带有 Github Demo 实现 [AnimatedAppIcons](https://github.com/bryce-co/AnimatedAppIcons),效果如下: 19 | 20 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/d89aceaf-cfd9-4a3b-ace6-c766682d664c) 21 | 22 | ### 🐕 [Copy on Write Performance Measurements](https://github.com/Swift-CowBox/Swift-CowBox-Sample) 23 | 24 | [@Kyle-Ye](https://github.com/Kyle-Ye): 24 年 04 月 15 日期推荐的 COW 库后续,作者使用 Benchmarks 和 Instruments 对他的 COW 库进行了详细的性能评估。对性能评估和 COW 细节感兴趣的读者欢迎阅读。 25 | 26 | ### 🐢 [Build your next website in Swift](https://www.hackingwithswift.com/articles/266/build-your-next-website-in-swift) 27 | 28 | [@DylanYang](https://github.com/Dylan19Yang):本文作者借由 WWDC 2019 上苹果用来介绍 result builders 的 HTML 风格的代码作为引子,一步一步地展示了如何通过 Swift 的各种语法构建出一个类 HTML 风格的开发框架,并最终输出 HTML 代码,使得 Swift 开发者可以不必精通 HTML 就可以通过 Swift 写出 HTML 代码。同时写 Swift 代码相比直接写 HTML 又有更好的编译校验,提高了可靠性。在这个过程中,作者也介绍了 result builders 的用法和它的一些特性。最后作者揭示了这个框架的整体构思过程,当你回看时会发现这其实和 SwiftUI 如出一辙。 29 | 30 | 31 | ### 🐕 [Always correct gradient text in UIKit](https://nemecek.be/blog/143/always-correct-gradient-text-in-uikit) 32 | 33 | [@Barney](https://github.com/BarneyZhaoooo):这篇文章提供了在 UIKit 中为 UILabel 创建渐变文本的解决方案。初始方法是通过 UIImage 生成 UIColor,但存在问题:当 UILabel 的 frame 大于文本内容时,渐变显示不完整。解决方案包括使用 AutoLayout 居中渐变或设置合适的约束,或者使用 UIStackView 子类来自动布局,确保渐变正确渲染。文章强调,渐变渲染应作为最后步骤进行,以适应当前文本的边界。此方法也适用于 UITextView。 34 | 35 | ### 🐢 [一文搞懂七种基本的 GC 垃圾回收算法](https://mp.weixin.qq.com/s/RSWYSAzpvPJD056vZDQPig) 36 | 37 | [@Crazy](https://github.com/jiyan135960):本篇文章是一篇非常详细的关于 GC 算法的讲解文章,仔细的阅读本文不仅可以让你理解现有的七种基本的 GC 算法,更可以应用在面试中,让你在面试中给面试官留下深刻印象。本文先介绍了 GC 算法的起源与基本概念,其中主要讲解了 GC 算法的性能评价标准。基础讲解完之后本文开始详细讲述了 GC 的七种基本算法的原理与改进方法,其中包括:标记-清除法、引用计数法、GC 复制算法、标记-压缩算法、保守式 GC 、分代垃圾回收、增量式垃圾回收。在文章的最后作者更是用一张图来简明扼要的对七种算法进行了对比,将各个算法的优缺点都写在了表格之中。本文是一篇值得大家反复仔细阅读的文章,无论是工作中还是面试中对大家都会有很深的帮助。 38 | 39 | ## 音视频 40 | 41 | ### [WWDC Index](https://nonstrict.eu/wwdcindex/) 42 | 43 | [@EyreFree](https://github.com/EyreFree): WWDC 会议的非官方索引,包含 2000 年至 2023 年 3430 次会议的资源,以及各种技术讲座,比较完整。此网站不隶属于苹果公司,所有内容仅供参考。感兴趣的同学可以收藏学习。 44 | 45 | ### [Developing An Inclusive Mindset](https://david-smith.org/blog/2024/04/22/new-post/) 46 | 47 | [享耳先森](https://github.com/iblacksun): 如果你的产品在考虑或已经做了无障碍适配,建议看看这个视频。作者 David Smith 是独立开发者,开发了 `Pedometer Plus+` 等应用,视频里重点介绍了他对 ` 包容性设计 ` 的认知发展过程:无障碍适配不仅仅是 `Accessibility API` 适配这么简单,而应该从更全局的角度来审视整个设计。 48 | 49 | ## 内推 50 | 51 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 52 | 53 | [杭州] 心光团队 - 心光 App - iOS/Android/UI/UX/资深运营增长专家 54 | 55 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 56 | 57 | ## 关注我们 58 | 59 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 60 | 61 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 62 | 63 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 64 | 65 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 66 | 67 | ## 说明 68 | 69 | 🚧 表示需某工具,🌟 表示编辑推荐 70 | 71 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 72 | -------------------------------------------------------------------------------- /Reports/2024/#293-2024.06.17.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #293 | 2024-06-17 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/293.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐎 [Bad practice: not using a ButtonStyle](https://www.swiftwithvincent.com/blog/bad-practice-not-using-a-buttonstyle) 11 | 12 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了一些不使用 ButtonStyle 的 bad case,一篇关于 SwiftUI ButtonStyle 的入门科普。 13 | 14 | ## 文章 15 | 16 | ### 🌟 🐕 [QQ 客户端性能稳定性防劣化系统 Hodor 技术方案](https://mp.weixin.qq.com/s/ng_R0s9tAsFCdc2O1JE_Pw) 17 | 18 | [@JonyFang](https://github.com/JonyFang): 手 Q 的防劣化系统命名为 Hodor 系统,从 2021 年 10 月开始研发,历时近三年迭代至今。系统涉及验证闭环、群控机架搭建等复杂过程,包含不少行业内独创方案。与厂商合作进行底层问题沟通,并在 2024 年拓展至 QQ 桌面客户端。系统目前已在 QQ 各平台落地,方案可做借鉴。 19 | 20 | ### 🐎 [Comparing Swift Compiler Performance on Type Inference Part I Strings, Numbers, Arrays, Dictionaries and Constructables](https://lucasvandongen.dev/compiler_performance.php) 21 | 22 | [@kemchenj](https://kemchenj.github.io/): 这篇文章比较了 Swift 编译器在进行类型推断时的性能,特别是在字符串、数字、数组、字典和可构建类型的初始化方面。作者通过基准测试发现,使用未类型化的字面量初始化通常最快,而使用 `.init()` 的方式最慢。特别是在复杂上下文中,例如计算属性,`.init()` 的性能下降明显。文章还指出,不同版本的 Xcode 在编译性能上的差异,并提出了优化编译时间的具体建议。 23 | 24 | ### 🐎 [iOS 18: Notable UIKit Additions](https://www.swiftjectivec.com/ios-18-notable-uikit-additions) 25 | 26 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 iOS 18 中 UIKit 一些值得注意的新增功能 : 27 | - 自动 Trait 跟踪 : UIKit 会自动检测某些生命周期函数中涉及的 Trait 变化 , 并调用相应的更新函数,减少了开发者需要手动注册特征变化监听的代码。 28 | - UIUpdateLink: UIUpdateLink 提供了比 CADisplayLink 更好的性能和电池效率 , 可用于复杂动画和绘制应用程序。 29 | - 更多符号动画 : 新增了摇摆、呼吸和旋转等三种新的符号动画效果。 30 | - 自定义文本格式化 : 开发者可以自定义文本编辑器中显示的格式化工具,默认关闭需要手动 opt-in。 31 | 32 | ### 🐎 [Rust - 性能超越 Kotlin 的跨平台方案](https://mp.weixin.qq.com/s/b8lHRfk5G2yN7pkoURU7CA) 33 | 34 | [@Smallfly](https://github.com/iostalks):这篇文章讨论了跨平台开发技术,指出 Rust 由于内存安全、并发安全和 WebAssembly 支持,成为 C/C++ 的替代品,特别适合处理跨平台业务逻辑。文章分析了桥接、IPC 和 Canvas 绘制等跨平台方案,并提出使用 Rust 作为「前端中的后端」,通过 protobuf 等高效序列化方式与原生平台通信。Rust 在性能上超越 Kotlin Native,适合开发底层库。作者建议 Rust 可替代 C++ 用于跨平台开发,提供更现代的语法和更安全的代码。 35 | 36 | ## 代码 37 | 38 | ### 🌟 🐕 [o3d](https://mp.weixin.qq.com/s/_EaqpWF-CgCgX0sTkXoHsw) 39 | 40 | [@Damien](https://github.com/ZengyiMa): o3d 是一款 Flutter 3D 渲染插件,它是一个能够在 Flutter 上渲染 glTF 和 GLB 格式 3D 模型的 widget 插件,支持 Android,IOS,Web 三个平台,不仅支持加载本地文件,而且支持加载在线文件。 41 | 42 | ### 🐎 [swift-testing-revolutionary](https://github.com/giginet/swift-testing-revolutionary/) 43 | 44 | [@DylanYang](https://github.com/Dylan19Yang): swift-testing-revolutionary 是一个 Xcode 插件,可以帮助开发者快速将自己现有项目中的的 XCTest 框架的测试代码自动迁移到苹果最新推出的 swift-testing 测试框架中,插件支持了大部分的代码转化,但仍有小部分需要人工处理。你也可以通过 Command Plugin 或者命令行工具来使用它。 45 | 46 | ### [Cocoapods-sled 让 iOS 组件二进制化变得简单](https://juejin.cn/post/7375419781132042267) 47 | [@莲叔](https://aaaron7.github.io):二进制化是加快编译速度的常见手段,很多大厂在这个方向都做过不小的研究。但目前行业上还缺乏比较泛用的方案。cocoapods —— sled 这个插件就是为了解决这个问题,能针对 pod 进行二进制化并且能灵活的切换二进制和源码构建。有类似需求的小伙伴可以试试。 48 | 49 | ## 内推 50 | 51 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 52 | 53 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 54 | 55 | ## 关注我们 56 | 57 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 58 | 59 | **关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** 60 | 61 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 62 | 63 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 64 | 65 | ## 说明 66 | 67 | 🚧 表示需某工具,🌟 表示编辑推荐 68 | 69 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 70 | -------------------------------------------------------------------------------- /Reports/2024/#297-2024.07.15.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #297 | 2024-07-15 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/297.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## WWDC24 内参 9 | 10 | ### 🌟 [WWDC24 10135 - What's new in Xcode 16](https://xiaozhuanlan.com/topic/3658412079) 11 | 12 | [@Yuanxu Han](https://github.com/hanyx1992):和往年一样,今年 Xcode 也迎来了全新版本,Session 10135 从 `Edit`,`Build`,`Debug`,`Test`,`Profile` 几个方面非常简短地讲述了更新的内容,文章针对这些重点特性分别进行了 Session 内容的翻译和部分必要的补充,尽力保证读者都可以对其有清楚的认识和理解;然后从 Xcode Release Note 中整理了部分需要关注的更新点;最终进行总结和探讨。 13 | 14 | ### 🌟 [WWDC24 10188 - SF Symbols 6 使用指南](https://xiaozhuanlan.com/topic/3691085724) 15 | 16 | [@Mim0sa](https://github.com/Mim0sa):为了更方便没有 SF Symbols 经验的读者理解,也将往年的 SF Symbols 相关内容归纳整理。本文从 SF Symbols 的特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些特点以及该如何使用。在这次 WWDC 2024 更新中,除了符号的数量增加到了 6000+ 之外,还新增了一些能让符号们更加活泼的动画效果,同时提升整体使用体验,给界面带来了更多活力和想象力,让 SF Symbols 这把利器变得又又又更加趁手和锋利了。 17 | 18 | ## 文章 19 | 20 | ### 🐎[The State Of Meridian](https://khanlou.com/2024/06/the-state-of-meridian/) 21 | 22 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了于几年前 Meridian Swift 服务端框架的最新状态(async&await / Websockets 支持 / 中间件等)和未来计划(Swift Macro 和 Swift OpenAPI framework 迁移),对 Swift on Server 感兴趣的同学可以详细阅读了解。 23 | 24 | ### 🐎 [Swift Testing support for SnapshotTesting](https://www.pointfree.co/blog/posts/146-swift-testing-support-for-snapshottesting) 25 | 26 | [@Smallfly](https://github.com/iostalks):WWDC24 推出的 Swift Testing 框架为 Swift 语言带来了新的原生测试支持。作者介绍 SnapshotTesting 库已同步支持此框架,同时提供了 Beta 预览和新特性。它简化了 XCTest 与 Swift Testing 的不兼容问题,允许开发者在不同测试环境中使用统一的 assertSnapshot 方法。对测试框架感兴趣的同学可阅读原文了解更多。 27 | 28 | ### 🐕 [Using TextRenderer to create highlighted text](https://alexanderweiss.dev/blog/2024-06-24-using-textrenderer-to-create-highlighted-text) 29 | 30 | [@AidenRao](https://weibo.com/AidenRao): 这篇博文介绍了如何使用 TextRenderer 在 SwiftUI 中创建带有文本高亮效果的视图。TextRenderer 是在 WWDC 2024 上引入的新协议,可以增强文本的渲染。使用TextRenderer,我们可以更纯粹地在 SwiftUI 中实现文本高亮,而不再需要使用 NSAttributedString。 31 | 32 | ## 工具 33 | 34 | ### 🐎 [ImHex](https://github.com/WerWolv/ImHex) 35 | 36 | [@EyreFree](https://github.com/EyreFree):ImHex 是一个功能丰富的十六进制编辑器,专为逆向工程师、程序员和夜间工作者设计。它提供了许多实用功能,如: 37 | 38 | - 强大的十六进制视图,支持字节修补、无限撤销 / 重做、多种数据解释和高亮显示等; 39 | - 自定义 C++ 风格的模式语言,用于解析和高亮文件内容; 40 | - 数据检查器,可将数据解释为多种类型; 41 | - 基于节点的数据预处理器,可在显示前修改和解码数据; 42 | - 支持多种数据源,如本地文件、原始磁盘、进程内存等; 43 | - 内置反汇编器,支持多种处理器架构; 44 | - 集成 Yara 规则扫描; 45 | - 差异比较、数据分析、可视化等辅助工具; 46 | - 现代化用户界面,支持多工作区、自定义布局、深色模式等。 47 | 48 | 总之,ImHex 是一款功能全面、设计专业的十六进制编辑器,可以极大提升逆向工程和低级编程的工作效率,感兴趣的朋友可以试试。 49 | 50 | ## 代码 51 | 52 | ### 🐎 [StreamUI](https://github.com/StreamUI/StreamUI) 53 | 54 | [@Damien](https://github.com/ZengyiMa): StreamUI 项目是一个用于创建和流媒体视频的强大库,它允许开发者使用 SwiftUI 编程生成动态视频,并实时渲染和直播。这个库的主要功能包括实时视频渲染,直播流媒体,动态视频生成等。 55 | 56 | ## 内推 57 | 58 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 59 | 60 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 61 | 62 | ## 关注我们 63 | 64 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 65 | 66 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 67 | 68 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 69 | 70 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 71 | 72 | ## 说明 73 | 74 | 🚧 表示需某工具,🌟 表示编辑推荐 75 | 76 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 77 | -------------------------------------------------------------------------------- /Reports/2024/#298-2024.07.22.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #298 | 2024-07-22 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/298.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## WWDC24 内参 9 | 10 | ### 🌟 [WWDC24 10104 - 使用 RealityKit 构建空间绘画 App](https://xiaozhuanlan.com/topic/9421058376) 11 | 12 | [@Layer](https://github.com/LLLLLayer): RealityKit 是 visionOS 应用空间功能的基础。我们将以空间绘画 App 为例,探索资源在 RealityKit 中的运作方式,通过构建自定义网格、纹理和着色器、使用低级别网格和纹理 API 等,实现精致的视觉设计。 13 | 14 | ### 🌟 [WWDC24 10074 - 动态字体体验入门](https://xiaozhuanlan.com/topic/6789542301) 15 | 16 | [@nuomi1](https://github.com/nuomi1): 使用动态字体功能实现一个演示 App,对比 SwiftUI 与 UIKit 在实现上的异同点。 17 | 18 | ### 🌟 [WWDC24 10118 - UIKit 新功能](https://xiaozhuanlan.com/topic/0679358421) 19 | 20 | [@Sharker](https://github.com/AkaShark): 在 iOS 18 中,UIKit 经历了显著的改进,专注于提升用户界面的直观性和互动性。最引人注目的是全新的文档启动体验,它为应用提供了更多个性化展示的空间,同时优化了用户的首次文档创建流程。标签栏和侧边栏也经过了重新设计,不仅外观更加紧凑,还增加了新的定制功能,使得内容展示更为突出。强化了 SwiftUI 和 UIKit 之间的互操作性,特别是通过统一手势系统和允许 SwiftUI 动画类型直接应用于 UIKit 视图,极大地丰富了开发者在动画和交互设计上的选项。此外,UIKit 的 Trait 系统现在支持自动特性跟踪,简化了视图更新,提高了应用性能。为了进一步增强用户体验,iOS 18 引入了 UIUpdateLink ,它使得周期性的 UI 更新更为高效,并且通过感官反馈的改进,如对 Apple Pencil Pro 的支持,为 iPad 用户提供了更加丰富的交互反馈。文本编辑也得到了提升,新的文本格式化面板和写作工具为用户提供了更直观的编辑体验。总的来说,iOS 18 的 UIKit 更新为开发者提供了更多创新的工具和 API,以构建更加引人入胜和用户友好的应用界面。 21 | 22 | ## 新手推荐 23 | 24 | ### 🐎 [Blend Modes in SwiftUI](https://digitalbunker.dev/blend-modes-in-swiftui/) 25 | 26 | [@Smallfly](https://github.com/iostalks):这篇文章详细介绍了 SwiftUI 中的图层混合模式(Blend Modes),展示了如何通过这些模式增强图像的视觉效果。从基础的「正常」模式到复杂的「强光」和「颜色减淡」,每个模式都有详细的计算公式和效果展示。如果你想设计更有吸引力的视觉效果,推荐一读。 27 | 28 | ## 文章 29 | 30 | ### 🐕 [Mastering Animatable and AnimatablePair in SwiftUI](https://digitalbunker.dev/mastering-animatable-and-animatablepair-swiftui/) 31 | 32 | [@水水](https://www.xuyanlan.com/categories/iOS/):在本文中,探索了 SwiftUI 的 Animatable 和 AnimatablePair,并通过 Demo 代码和实际效果举例让大家了解如何使用这些 API 在应用程序中制作更高级的动画。 33 | 34 | ### 🐎 [Introducing Entry macro in SwiftUI](https://swiftwithmajid.com/2024/07/09/introducing-entry-macro-in-swiftui/) 35 | 36 | [@EyreFree](https://github.com/EyreFree):这篇文章介绍了 SwiftUI 中新推出的 `@Entry` 宏,它极大地简化了自定义环境键和聚焦值的创建过程。传统方法需要为每个自定义环境键创建符合 EnvironmentKey 协议的类型,而使用 `@Entry` 宏只需在 EnvironmentValues 的扩展中定义变量即可,大大减少了样板代码。文章通过示例展示了 `@Entry` 宏在环境值和聚焦值中的应用,强调了其简洁性和易用性。`@Entry` 宏不仅适用于环境值,还可用于事务、容器和聚焦值。它是向后兼容的,可以在之前的 Apple 平台版本中使用,为开发者提供了更高效的 SwiftUI 编程体验。 37 | 38 | ### 🐎 [Create Custom SF Symbols in Sketch ](https://www.danijelavrzan.com/posts/2024/06/create-custom-sf-symbols/) 39 | 40 | [@zoeGuo](https://github.com/zoeGuo):SF Symbols 是由苹果公司推出的一套系统图标,这篇文章作者介绍了如何用已有的 SF Symbols 简单修改获得自己想要的自定义 SF Symbols。通过简单的示例说明了怎么导入符号、调试、调整和优化等,操作简单易学,适合想自己做一些简单图标的初学者。 41 | 42 | ## 代码 43 | 44 | ### 🐎 [Charts](https://github.com/ChartsOrg/Charts) 45 | 46 | [@极速男孩](https://github.com/ztlyyznf001):DGCharts 是为 iOS、tvOS 和 macOS 平台设计的图表库,灵感来源于 Android 的 MPAndroidChart。除了基本的图表类型,如折线图、条形图、散点图和饼图,还支持自定义图表样式、高亮显示、图表交互、动态数据更新等高级功能。 47 | 48 | ## 内推 49 | 50 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 51 | 52 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 53 | 54 | ## 关注我们 55 | 56 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 57 | 58 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 59 | 60 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 61 | 62 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 63 | 64 | ## 说明 65 | 66 | 🚧 表示需某工具,🌟 表示编辑推荐 67 | 68 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 69 | -------------------------------------------------------------------------------- /Reports/2024/#299-2024.07.29.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #299 | 2024-07-29 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/299.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## WWDC24 内参 9 | 10 | ### 🌟 [WWDC24 10146 - 为自定义容器视图添加更多的能力](https://xiaozhuanlan.com/topic/9032587461) 11 | 12 | [@whf881211](https://github.com/whf881211):该文章介绍了 SwiftUI 新添加的一些用于操控 Subview 的 API。这些 API 令 SwfitUI 的操控 UI 的能力大大增强,让我们可以给自定义容器添加更多灵活性和更强大的能力。 13 | 14 | ### 🌟 [WWDC24 10198 运行、暂停、检查:探索如何使用 LLDB 进行有效调试](https://xiaozhuanlan.com/topic/0854921673) 15 | 16 | [@haochen08](https://github.com/haochen08):本文以 WWDC24-10198 为主线,综合了 WWDC19-24 期间多个和调试主题相关的 Session,向大家介绍如何使用 Xcode IDE 和 LLDB 的最新能力,进行有效和高效的调试。同时还介绍了如何处理使用相关工具碰到的常见问题和一些高级技巧。 17 | 18 | ## 文章 19 | 20 | ### 🐎 [SwiftUI Hero Animations with NavigationTransition](https://peterfriese.dev/blog/2024/hero-animation/) 21 | 22 | [@xiaofei86](https://github.com/xiaofei86):借助 iOS 18 中 SwiftUI 新引入的 NavigationTransition 协议实现和 App Store 首页卡片展开类似的 Hero 动画只需三行代码。阅读本文,跟着作者一步步复现一模一样的效果,并了解相关的 SwiftUI 新特性。 23 | 24 | ### 🐕 [Memory consumption when loading UIImage from disk](https://www.avanderlee.com/swiftui/memory-consumption-loading-uiimage-from-disk/) 25 | 26 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章主要讨论了在使用 SwiftUI 从磁盘加载 UIImage 时遇到的内存消耗问题,并提供了多种解决方案来优化内存使用。通过下面这些要点,读者可以全面了解文章讨论的内存消耗问题、原因、解决方案以及优化建议: 27 | - 1.内存消耗问题 28 | - 问题描述:当使用 UIImage 从磁盘加载大量图片时,内存消耗会迅速增加,特别是当图片频繁切换或数量较多时 29 | - 示例场景:文章通过一个包含 200 张壁纸的示例项目,展示了使用 SwiftUI Slider 滑动查看图片时内存消耗增加的问题 30 | - 2.内存增长原因 31 | - 系统缓存机制:使用 UIImage(named:)方法加载图片时,图片会被系统缓存,导致内存占用增加 32 | - 代码实现:展示了使用 UIImage(named:)方法的代码示例,并解释了为什么这种方法会导致内存问题 33 | - 3.解决方案 34 | - 避免系统缓存:推荐使用 UIImage(contentsOfFile:)方法加载图片,该方法不会将图片添加到系统缓存中,从而减少内存消耗 35 | - 代码优化:通过重写图片加载逻辑,使用 UIImage(contentsOfFile:)替代 UIImage(named:),解决了内存快速增长的问题 36 | - 4.图像缓存策略 37 | - NSCache 使用:对于需要处理或频繁访问的图片,可以使用 NSCache 进行缓存,以提高性能和减少内存浪费 38 | - 缓存逻辑:展示了如何使用 NSCache 创建一个简单的图像缓存,并在需要时从缓存中检索或存储处理后的图像 39 | - 5.性能优化建议 40 | - 预处理图像:建议在后台线程预先处理图像(如缩放),以避免在主线程上进行耗时操作,提高应用性能 41 | - 预加载策略:可以提前加载即将显示的图片,以减少滑动时的加载延迟 42 | 43 | ### 🐎 [Exploring SwiftUI: Make SF Symbols Wiggle Wiggle](https://www.rudrank.com/exploring-swiftui-make-sf-symbols-wiggle/) 44 | 45 | [@Smallfly](https://github.com/iostalks):这篇文章主要介绍了如何在 SwiftUI 中使用 SF Symbols 的新型摆动(wiggle)动画效果。 46 | 47 | ### 🐎 [Using SwiftUI in Command Line Tools](https://swifttoolkit.dev/posts/swiftui-meets-command-line) 48 | 49 | [@Damien](https://github.com/ZengyiMa):文章介绍了一种创新的方法,使用 SwiftUI 框架在命令行工具中为 iOS 应用图标添加徽章。通过 ImageRenderer 类,SwiftUI 视图可以被导出成图像。文章提供了一个名为 badgeify 的示例工具,它接受命令行参数来指定图标的输入输出路径和徽章文本。badgeify 工具利用 SwiftUI 构建视图,并利用 ImageRenderer 生成最终的带徽章图标图像。尽管在命令行环境中使用 SwiftUI 存在一些限制,比如 Xcode 无法为 SPM 可执行文件生成预览,但文章也提供了一些技巧来优化开发和测试流程。 50 | 51 | ## 工具 52 | 53 | ### 🐎 [Enable XcodeLLM on ChinaSKU Mac without disabling SIP](https://github.com/Kyle-Ye/XcodeLLMEligible) 54 | 55 | [@Kyle-Ye](https://github.com/Kyle-Ye): 借助开源 eligibility_util 实现,实现在国行设备不关闭 SIP 的情况下使用 Xcode 16 Beta 的 LLM 功能 56 | 57 | ## 代码 58 | 59 | ### 🐎 🌟 [Charts](https://github.com/ChartsOrg/Charts) 60 | [@水水](https://www.xuyanlan.com/categories/iOS/):Charts 是一个用 Swift 编写的为 iOS 创建图表方面提供各类样式的库,其对标的是在 Android 开发人员中非常受欢迎的 MPAndroidChart 图表库。对于读者来说非常值得参考和收藏。 61 | 62 | ## 内推 63 | 64 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 65 | 66 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 67 | 68 | ## 关注我们 69 | 70 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 71 | 72 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 73 | 74 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 75 | 76 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 77 | 78 | ## 说明 79 | 80 | 🚧 表示需某工具,🌟 表示编辑推荐 81 | 82 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 83 | -------------------------------------------------------------------------------- /Reports/2024/#303-2024.08.26.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #303 | 2024-08-26 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/303.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [CocoaPods 官宣进入维护模式](https://blog.cocoapods.org/CocoaPods-Support-Plans/) 11 | 12 | CocoaPods 的生命走入倒计时,后续将在某个时间节点将 Specs repo 设置为 read-only,一个时代结束了。感谢开源社区的作者们提供了这么好用的依赖工具。对于国内的开发者来说,在 SPM 能满足大家需求前,可以考虑在内网建立私有 Specs repo 以及定制 Cocoapods 功能以持续迭代。 13 | 14 | ## WWDC24 内参 15 | 16 | ### 🌟 [WWDC24 10173 - Analyze Heap Memory](https://xiaozhuanlan.com/topic/9307481265) 17 | 18 | [@iPhreetom](https://github.com/iPhreetom):新手级的 iOS 内存分析入门文章,通过学习 MemoryGraph 和 Allocations 的使用,帮助你在开发中更好的解决内存问题。 19 | 20 | ## 文章 21 | 22 | ### 🐕 [Reminder: Conditional Breakpoints are Slow](https://twocentstudios.com/2024/08/08/conditional-breakpoints/) 23 | 24 | [@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章作者分享了一个有趣的调试故事,为了排查调试项目时发现的不合理的延迟,尝试了禁用调试器、深入了解 GRDB、代码验证等手段,花了数个小时跨越几周的时间,最终发现其实是 LLDB 中的条件断点会增加明显的执行延迟问题。能发现并解决问题总是一个令人愉快的体验,相信读者也有一样的体会,感兴趣的可以看看这个故事。 25 | 26 | ### 🐕 [Issue with AVAsset access in iOS 18 beta | Apple Developer Forums](https://forums.developer.apple.com/forums/thread/758691) 27 | 28 | [@Barney](https://github.com/BarneyZhaoooo):在 iOS 18 中,直接通过硬编码路径访问 AVAsset 会引发权限错误。Apple 技术支持 Quinn 指出,应用应使用 PhotoKit API 来安全地访问和处理用户的照片库,以符合 iOS 的沙盒机制。 29 | 30 | ### 🐕 [How to automatically detect memory leaks on CI/CD using UI tests](https://www.polpiella.dev/automatically-detect-memory-leaks-using-ui-tests/) 31 | 32 | [@莲叔](https://aaaron7.github.io/):内存泄露一直都是 iOS 开发者头疼的问题,并且绝大多数情况都会比较隐蔽,无法简单的被发现。这篇文章介绍了一种结合 UI test 来挖掘内存泄露的方式,通过使用 xcodebuild 新的 enablePerformanceTestsDiagnostics 特性,在 UI test 过程中能自动生成 memory graph 的报告,作者还给出了通过 Swift 来解析内存报告和判断内存泄露的案例,这样就能够自动化的去测试用户在使用 App 的过程中是否有内存泄露。整体来说提出了一种新的解决泄露的思路,并且给出了可落地的方案参考。 33 | 34 | 35 | ## 代码 36 | 37 | ### 🐎 [swift-translate](https://github.com/hidden-spectrum/swift-translate) 38 | 39 | [@DylanYang](https://github.com/Dylan19Yang):一个帮助开发者快速完成字符串本地化翻译的工具,支持通过 ChatGPT 或者 Google Translate 进行翻译。目前源语言必须是英语,同时项目还在早期阶段,可能存在部分翻译不准确、漏翻等情况,使用者需要自行关注。 40 | 41 | ## 内推 42 | 43 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 44 | 45 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 46 | 47 | ## 关注我们 48 | 49 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 50 | 51 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 52 | 53 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 54 | 55 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 56 | 57 | ## 说明 58 | 59 | 🚧 表示需某工具,🌟 表示编辑推荐 60 | 61 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 62 | -------------------------------------------------------------------------------- /Reports/2024/#304-2024.09.02.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #304 | 2024-09-02 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/304.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | 9 | ## 文章 10 | 11 | ### 🐕 [JSON Parsing in Swift explained with code examples](https://www.avanderlee.com/swift/json-parsing-decoding/) 12 | 13 | [@zoeGuo](https://github.com/zoeGuo):解析 JSON 是我们在编码中常处理的问题,文章介绍了在 Swift 编码中不使用外部依赖解析 JSON。作者示例说明了如何使用 `Decodable` 协议来轻松解码 JSON,如何通过自定义映射将 JSON 关键字映射到 Swift 属性名,以及如何转换驼峰命名法和蛇形命名法,示例了如何使用自定义日期格式解码 JSON 中的日期。作者还提供了利用 AI 将 JSON 转换为 Swift 结构体的 prompt,一个以美观的格式打印 JSON 的扩展。这篇文章详细介绍了 Swift 中 JSON 解码的各个方面。 14 | 15 | ### 🐕 [SwiftUI for Mac 2024](https://troz.net/post/2024/swiftui-mac-2024/) 16 | 17 | [@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章列举了系列示例代码来展示 WWDC 2023 和 WWDC 2024 中 SwiftUI 在 MacOS 应用程序上更新的新功能,主要包含了以下方面的内容: 18 | 19 | - Xcode 20 | - Previews 21 | - Windows 22 | - Tabs 23 | - Charts 24 | - Colors and Gradients 25 | - SF Symbols 26 | 27 | ### 🐢 [Flutter Web 正式官宣弃用 HTML renderer , Canvas 路线成为唯一](https://mp.weixin.qq.com/s/FdRMQGcZU5BDOI2N0EksiQ) 28 | 29 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter Web 一直是 Flutter 团队努力攻克的一个方向 , 最初 HTML renderer 的路线最近被团队所抛弃 , 采用 CanvasKit 结合 WASM 方式;本文讲述了 Flutter Web 在 HTML renderer 到 CanvasKit 上的取舍和对比 , 可以让我们更深度的了解为何 CanvasKit 成为了唯一路线. 30 | 31 | ### 🐎 [Investigating a Dynamic Linking Crash with Xcode 16](https://pspdfkit.com/blog/2024/dynamic-linking-crash-xcode-16/) 32 | 33 | [@Smallfly](https://github.com/iostalks):这篇文章作者介绍了 Xcode 16 beta 导致 PSPDFKit 在 iOS 上启动崩溃的问题。该问题与动态链接 `sqlite3_threadsafe` 有关。调查发现,Xcode 的线程性能检查器默认启用,会导致 `libRPAC.dylib` 错误解析 SQLite 符号。解决方案是禁用该工具或更新 PSPDFKit 至 13.7 版本,后者允许 `libRPAC.dylib` 和 `libsqlite3.dylib` 共存,以防止崩溃。 34 | 35 | ### 🐎 [Swift Build Times and Module Verification …](https://pfandrade.me/blog/swift-build-times-and-module-verification/) 36 | 37 | [@Cooper Chen](https://github.com/cjlcooper):这篇文章讲述了开发 Secrets 4 时遇到的构建时间变慢的问题。作者将 Secrets 4 重构为 36 个框架,结果发现构建时间逐渐增加。主要原因是启用了 Xcode 的模块验证功能(ENABLE_MODULE_VERIFIER),该功能在构建时检查各种模块问题,虽然对框架分发有帮助,但在调试时会显著拖慢速度。作者决定在调试构建中禁用该功能,结果构建时间从 3.5 分钟减少到 52 秒。此举大大提高了开发效率,也提醒开发者定期检查构建时间以优化开发流程,这对于优化 Swift 工程的编译效率有不错的参考意义。 38 | 39 | ### 🐕 [JavaScript to Swift and back: Bridging location services in WKWebView](https://swiftlybald.com/javascript-to-swift-and-back-bridging-location-services-in-wkwebview/) 40 | 41 | [@AidenRao](https://weibo.com/AidenRao):这篇文章主要解决 WKWebView 访问地理位置权限,会触发两次位置授权弹窗(APP 授权 与 特定网页授权)的问题。解决方案主要是通过拦截来自浏览器的位置服务请求,在 iOS 中本地处理它们,然后在位置相关工作完成后将控制权交还给浏览器。如果你的 APP 有类似的体验问题,可以参考文章的实现原理进行优化。 42 | 43 | ### 🐎 [Send data Between iOS Apps and Extensions Using Darwin Notifications](https://ohmyswift.com/blog/2024/08/27/send-data-between-ios-apps-and-extensions-using-darwin-notifications/) 44 | 45 | [@DylanYang](https://github.com/Dylan19Yang):本文介绍了一种用于进程间通信的方式。在 App 内通知是一种通信的常用的手段,而有一种特殊的通知可用于进程间的通信 ———— Darwin Notifications。通常谈到进程间通信,我们会想到 Userdefaults 或者 Keychain,但是从作者看来 Darwin Notifications 会是一种更合适的方式,不过它有一个缺点是无法携带额外的信息(类似 userInfo)。作者展示了一个简单的 demo 来说明如何使用,感兴趣的读者可以阅读本文学习一下。 46 | 47 | 48 | ## 内推 49 | 50 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 51 | 52 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 53 | 54 | ## 关注我们 55 | 56 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 57 | 58 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 59 | 60 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 61 | 62 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 63 | 64 | ## 说明 65 | 66 | 🚧 表示需某工具,🌟 表示编辑推荐 67 | 68 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 69 | -------------------------------------------------------------------------------- /Reports/2024/#305-2024.09.09.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #305 | 2024-09-09 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/305.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## WWDC24 内参 9 | 10 | ### 🌟 [WWDC24 10151 - SwiftUI 过渡效果篇](https://xiaozhuanlan.com/topic/8321460975) 11 | 12 | [@zdd](https://github.com/zddhub):本文将介绍 SwiftUI 实现过渡效果的两种方式:AnyTransition 和 Transition。并逐步剖析自定义 SwiftUI 过渡效果的步骤和注意事项,最后通过多个示例展示视觉、着色器、颜色、文字、滚动和导航等不同类型过渡效果的应用,旨在启发读者创建令人印象深刻的过渡效果。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [Backport SwiftUI modifiers](https://alejandromp.com/development/blog/backport-swiftui-modifiers/) 17 | 18 | [@AidenRao](https://weibo.com/AidenRao):SwiftUI 每年都会更新新的修饰符,但我们往往需要等待用户更新到修饰符支持的最低版本,才能享受这些新功能。本篇作者分享了一些技巧和方法,帮助开发者在较旧的 Swift UI 环境中使用新的 SwiftUI 修饰符,在确保旧版本用户体验不变的情况下,面向未来做开发,毫无问题地使用新版本 API。实现原理主要是检查操作系统版本,并在可用时调用 SwiftUI 函数,在不可用时回退到其他函数。 19 | 20 | ### 🐢 [抄 Apple Intelligence 作业的思路](https://juejin.cn/post/7407385581079396389) 21 | 22 | [@Cooper Chen](https://github.com/cjlcooper):近年来,AI 领域迅猛发展,模型规模和性能不断提升,而这是一篇对端上智能或者说 LLM 总结和思考的文章,作者从三个大的方面对当前 Apple Intelligence 的诞生、现状以及展望做了非常详尽的分析,其核心的观点大致可以总结为: 23 | - 以技术为基石的应用更要对技术诚实,LLM 幻觉和推理能力不足可以采用移交控制 / 验证和主动治理 / 约束策略 24 | - 并不是所有 AI 都需要以 AGI 为目标,提升现有产品的核心体验 / 收益也可以作为投入目标 25 | - 借助 LLM 实现跨 domain 交互在技术上可行,但不同 domain 有不同的商业模式考量 26 | 27 | 对于不仅是 AI 相关行业的开发,甚至对于各平台的开发来说都有非常大的参考价值,值得反复的阅读和思考。 28 | 29 | ### 🐎 [Dogfooding Emerge Tools: Open-sourcing an Android Hacker News App](https://www.emergetools.com/blog/posts/open-sourcing-emerge-tools-hackernews-app) 30 | 31 | [@Crazy](https://github.com/jiyan135960):关于 Hacker News 的 App 有很多,这次是由 Emerge 团队开发的一款 Hacker News 阅读器。Emerge 团队开发了很多关于应用性能优化与分析的工具,他们在移动应用领域有着深厚的背景。这款新的 Hacker News App 正是使用了他们自己开发的诸多工具来完成的具体实践,这些工具可以让开发者在开发的过程中发现一些错误,并且有自动去除 dead code 等功能。开发者也可借鉴他们的开源代码来使用 Emerge 团队的开发工具,大大简化了开发者从开发到上架的实施难度。 32 | 33 | 34 | ## 音视频 35 | 36 | ### 🐢 [Cross-Platform Swift: View Paradigms](https://www.pointfree.co/episodes/ep290-cross-platform-swift-view-paradigms) & [Cross-Platform Swift: WebAssembly](https://www.pointfree.co/episodes/ep291-cross-platform-swift-webassembly) 37 | 38 | [@Kyle-Ye](https://github.com/Kyle-Ye):本系列视频探讨了如何通过合理的领域建模,将同一套功能集无缝地应用于不同的视图范式和跨平台环境中(UIKit/SwiftUI/WebAssembly),对 Swift 进行跨平台开发感兴趣的读者可以阅读学习下。 39 | 40 | ## 内推 41 | 42 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 43 | 44 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 45 | 46 | ## 关注我们 47 | 48 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 49 | 50 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 51 | 52 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 53 | 54 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 55 | 56 | ## 说明 57 | 58 | 🚧 表示需某工具,🌟 表示编辑推荐 59 | 60 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 61 | -------------------------------------------------------------------------------- /Reports/2024/#306-2024.09.23.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #306 | 2024-09-23 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/306.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐢 [Xcode Folders & Groups](https://troz.net/post/2024/xcode_folders_groups/) 11 | 12 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): Xcode 15 到 Xcode 16 有不少变化,本文就 Folders & Groups 相关变化做了一些比较,比如 : 添加文件,创建 Group 等;最终作者也给出了一些总结性的建议,如果有不习惯新组织形式的小伙伴依然可以保持 15 时候的形式. 13 | 14 | ### 🐢 [COW2LLVM: The isKnownUniquelyReferenced Deep-Dive](https://jacobbartlett.substack.com/p/cow2llvm-the-isknownuniquelyreferenced) 15 | 16 | [@Cooper Chen](https://github.com/cjlcooper):Swift 编译器中的 copy-on-write(CoW)优化了 Swift 结构体,结合了值语义和引用语义。它将数据存储在堆内存中,允许通过轻量级指针高效复制,同时确保在数据更改时触发值语义。这种技术被 Swift 的标准类型(如 Array 和 String)所采用。这篇文章深入探讨了 Swift 编译器中的 CoW 优化,文章将带领读者探索 Swift 编译器的源代码,揭示 CoW 的工作原理,旨在让读者对这一复杂的机制有更深入的理解。 17 | 18 | ### 🐕 [SwiftUI's Observable macro is not a drop-in replacement for ObservableObject](https://www.jessesquires.com/blog/2024/09/09/swift-observable-macro/) 19 | 20 | [@Barney](https://github.com/BarneyZhaoooo):文章指出 SwiftUI 的 `@Observable` 宏并非 `ObservableObject` 的完美替代。主要区别在于初始化行为: `@StateObject` 仅初始化一次,而 `@State` 每次视图重建时都会重新初始化。这可能导致意外行为,建议将全局状态放在 `App` 结构中以避免问题。 21 | 22 | ### 🐢 [我是怎么做个人知识管理(PKM)的](https://starming.com/2024/09/12/my-pkm/) 23 | 24 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章概述了作者个人知识管理(PKM)的历程与心得,从早期使用备忘录、Evernote 等工具,到探索 Bear、Notion、Obsidian 等结构化笔记应用,作者经历了从信息囤积到注重信息消化的转变,最终采用卢曼卡片盒笔记法,通过闪念笔记、文献笔记、永久笔记等形式,建立笔记间的关联,形成知识网络。同时,结合 P.A.R.A 框架优化管理流程,并引入费曼学习法、CODE 方法论等工具促进知识内化。作者强调工具与方法的选择应基于个人需求,且写作是知识管理的重要产出形式。整篇文章为读者提供了关于如何高效管理和利用信息的实用指南。 25 | 26 | ## 工具 27 | 28 | ### [swift-export](https://swiftpackageindex.com/franklefebvre/swift-export) 29 | 30 | [@Smallfly](https://github.com/iostalks):swift-export 是一款命令行工具,用于在 macOS 上更容易地签名和公证可执行包。这可以帮助开发者简化在 macOS 上分发应用程序时的安全和合规性流程。具体来说,它包括以下功能: 31 | 32 | - **签名**:为应用程序添加数字签名,这是 macOS 应用程序分发的一个要求,以确保应用程序的来源和完整性。 33 | - **公证**:将应用程序提交给 Apple 进行公证,这是 macOS Catalina 及更高版本中的一项新要求,用于确保应用程序在启动时不会损害用户的安全。 34 | 35 | 这个工具对于需要频繁构建和分发 macOS 应用程序的开发者来说非常有用。 36 | 37 | ## 代码 38 | 39 | ### [HandVector 2.0 版本更新](https://juejin.cn/post/7408086889591390262) 40 | 41 | [@BluesJiang](https://github.com/BluesJiang):这个之前推荐过的开源库又迎来的大的更新,新增了 HandleShape 的 API,给不同手的不同形态给出了具象化的分类,可以更语义化的了解目前手势的情况,如手掌弯曲了多少、手指捏合了多少、手指弯曲了多少等。有利于开发快速调整以寻找合适的手势匹配参数,而不是像之前录制手势那样必须完全精准的重现手势才能达成目的。对手势交互依赖比较重的应用可以考虑升级和使用。 42 | 43 | ### 🐎 [Hummingbird 2](https://forums.swift.org/t/hummingbird-2/74535) 44 | 45 | [@DylanYang](https://github.com/Dylan19Yang):Hummingbird 是一个用 Swift 编写的轻量又灵活的后端框架,它包含了路由、请求和结果处理、编解码等诸多能力。它最近发布了新版本 Hummingbird 2,代码整体基于 Swift 的结构化并发进行了重写,使代码更易读,感兴趣的读者可以关注一下。 46 | 47 | ## 内推 48 | 49 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 50 | 51 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 52 | 53 | ## 关注我们 54 | 55 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 56 | 57 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 58 | 59 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 60 | 61 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 62 | 63 | ## 说明 64 | 65 | 🚧 表示需某工具,🌟 表示编辑推荐 66 | 67 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 68 | -------------------------------------------------------------------------------- /Reports/2024/#307-2024.09.30.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #307 | 2024-09-30 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/307.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | 提前祝大家国庆快乐,我们下一期周报会在 10 月中旬与大家见面。 9 | 10 | ## 文章 11 | 12 | ### 🌟 🐢 [在 Swift 中如何正确传递 Unsafe Pointers 参数](https://mp.weixin.qq.com/s/xDeZ6zM7-6RfPXrs5kCqWw) 13 | 14 | [@Kyle-Ye](https://github.com/Kyle-Ye): 文章总结了作者在抖音推动规模化落地 Swift 组件中发现的一些常见 Unsafe Pointers 问题。通过具体的工程例子和编译器代码分析给出了具体原因。 15 | 16 | ### [为超越 JVM 而生?深入理解 Kotlin Native 的梦想与可能](https://mp.weixin.qq.com/s/oo7YTnW4oL1xq17cNPGhnw) 17 | 18 | [@JonyFang](https://github.com/JonyFang): Kotlin Native 是 Kotlin 多平台生态的关键一环。本文依据 Kotlin Native 的源码,结合作者在运用 Kotlin Native 开发多平台应用的实战经验,详细为大家解读 Kotlin Native 在编译时和运行时的实现细节和实践技巧。作为 Kotlin 多平台生态的重要一环,Kotlin Native 不再依赖其他运行环境,同时也能保持与其他平台一致的开发体验。 19 | 20 | ### 🐎 [Freeing disk space on GitHub Actions runners](https://www.dzombak.com/blog/2024/09/Freeing-disk-space-on-GitHub-Actions-runners.html) 21 | 22 | [@J_Knight_](https://github.com/knightsj):本文分享了可以清理 GitHub Actions 的运行器所在的服务器的内存空间的脚本代码,以用来防止在执行 GitHub Actions 工作流的时候遇到内存不足的问题。 23 | 24 | ### 🐕 [SwiftData: Solving Fatal Errors and EXC_BAD_ACCESS While Handling Entities on Different Threads](https://www.simplykyra.com/blog/swiftdata-solving-fatal-errors-and-exc_bad_access-while-handling-entities-on-different-threads/) 25 | 26 | [@AidenRao](https://weibo.com/AidenRao):这篇博客介绍了在处理不同线程上的 Entities 时如何解决 SwiftData 中的异常崩溃。通过示例代码和步骤,作者展示了如何有效解决这些错误,希望能帮助读者解决类似问题。 27 | 28 | ### 🐎 [Exploring SwiftUI: Creating a Custom Slider Inspired By Camera Control](https://www.rudrank.com/exploring-swiftui-creating-a-custom-slider-inspired-by-camera-control/) 29 | 30 | [@zoeGuo](https://github.com/zoeGuo):文章是作者在看到 iPhone16 上相机控制的丝滑交互动效后收到启发,自己用 SwiftUI 实现了一套类似的动画流畅、并且有交互反馈的 slider 控件。作者在文中介绍了设计和实现的思路,并最终应用在自己的上线 App 中的过程。 31 | 32 | ### 🐎 [Point-Free is Xcode 16 ready](https://www.pointfree.co/blog/posts/152-point-free-is-xcode-16-ready) 33 | 34 | [@极速男孩](https://github.com/ztlyyznf001): Point-Free 更新了开源库,以支持 Swift 6.0 和 Xcode 16,同时保持对旧版 Swift 和 Apple 平台的兼容性。此次更新特别强化了并发安全性,Dependencies 库通过使用 TaskLocal 实现了无警告编译,减少了不安全并发操作。Composable Architecture 库的 Store 现已完全在主线程上执行,确保了线程安全。此外还兼容 Swift 的新测试框架,同时继续支持 XCTest,帮助开发者平稳过渡。这些改进均保持向后兼容,开发者无需担心破坏性变更。 35 | 36 | ## 代码 37 | 38 | ### [ChatMLX](https://github.com/maiqingqiang/ChatMLX) 39 | 40 | [@EyreFree](https://github.com/EyreFree):ChatMLX 是一款面向 macOS 的开源聊天应用,基于大型语言模型 LLM 和 Apple silicon 芯片设计。其主要特点包括: 41 | 42 | - 多语言支持:兼容英文、中文(简 / 繁)、日文和韩文,满足多元用户需求; 43 | - 多模型集成:支持 Llama、OpenELM、Phi、Qwen 等多个 LLM 模型,为用户提供丰富的对话选择; 44 | - 高性能表现:充分利用 MLX 框架和 Apple silicon 芯片的优势,实现快速响应; 45 | - 隐私保护:通过本地运行 LLM,确保用户数据安全。 46 | 47 | 项目完全开源,使用 Swift 语言开发,结合 SwiftUI 构建用户界面,展示了 Swift 在 AI 应用开发领域的潜力。对 Apple 开发者而言,ChatMLX 提供了一个学习 AI 技术与原生应用融合的范例。 48 | 49 | ### [VisionOS 30 天学习计划](https://github.com/satoshi0212/visionOS_30Days) 50 | 51 | [@BluesJiang](https://github.com/bluesjiang):这个计划目前有两个版本:[visionOS 1.0](https://github.com/satoshi0212/visionOS_30Days) 以及 [visionOS 2.0](https://github.com/satoshi0212/visionOS_2_30Days) 版本。这里面可以找到大部分 visionOS 特性相关的示例代码,可以快速尝试 visionOS 上的独特的特性。十分推荐都看一遍,可以帮组你快速上手 visionOS 。 52 | 53 | ## 内推 54 | 55 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 56 | 57 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 58 | 59 | ## 关注我们 60 | 61 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 62 | 63 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 64 | 65 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 66 | 67 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 68 | 69 | ## 说明 70 | 71 | 🚧 表示需某工具,🌟 表示编辑推荐 72 | 73 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 74 | -------------------------------------------------------------------------------- /Reports/2024/#310-2024.11.04.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #310 | 2024-11-04 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/310.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [TestFlight 增强功能助你吸引测试员](https://developer.apple.com/cn/news/?id=fps422ld) 11 | 12 | TestFlight 分发功能迎来了加强,新增对测试员的招募标准,例如指定 OS 版本,方便在在 1w 的名额内,尽可能按 app 实际要求暴露问题,例如鼓励低 OS 的用户加入测试。同时还提供了公开链接的转化情况看板等新功能。总体是一次满足开发者们痛点的更新。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [How to build a Safari extension with SwiftUI](https://www.polpiella.dev/safari-extensions-swiftui/) 17 | 18 | [@Barney](https://github.com/BarneyZhaoooo):Polpiella 在博客中分享了如何使用 SwiftUI 构建 Safari 扩展的步骤。首先,在 Xcode 中创建 Safari 扩展目标并修改 Info.plist 文件,设置工具栏项和网站访问权限。接着,利用 SFSafariExtensionHandler 创建 SwiftUI 视图,并通过 PopoverViewController 展示。最后,运行应用即可在 Safari 中安装并测试扩展。 19 | 20 | ### 🐎 [Phase Animator Behavior](https://chris.eidhof.nl/post/phase-animator/) 21 | 22 | [@AidenRao](https://weibo.com/AidenRao):在这篇文章中,Chris Eidhof 探讨了 PhaseAnimator 的工作原理。当视图的位置从 -100 更改为 -100 时,更新前后的节点完全相同,并不会产生任何动画,当没有具体的动画时,会立即调用动画的完成处理程序。换句话说,我们马上就进入了下一个阶段。 23 | 24 | ### 🐎 [Swift Macro 在业务开发中的探索与实践](https://juejin.cn/post/7428200842229055529) 25 | 26 | [@JonyFang](https://github.com/jonyfang): 结合模块化场景及曝光场景下的应用,通过模块宏能解决模块化通用模版定义的繁琐, 通过曝光宏能降低整个曝光体系接入的复杂度,本质上都是让 Swift Macro 帮助我们减少重复样板代码的编写,提供快速接入的能力。接入 Swift Macro 可以玩出很多花样,增加了代码的趣味性和可读性,降低了维护成本。 27 | 28 | ### [App development on iPad](https://mutatingfunc.github.io/blog/2024-10-12-app-development-on-ipad/) 29 | 30 | [@Kyle-Ye](https://github.com/Kyle-Ye): 作者在过去一年里,全面投入到使用 iPad 进行应用程序开发。这篇文章介绍了在 iPad 上使用 Swift Playgrounds 进行 iOS 应用程序开发的可能性和局限性(缺乏 Xcode 的某些功能,如断点调试和模拟器支持)。虽然还存在一些局限性,但通过一些创新的解决方案,这些问题都可以得到缓解。 31 | 32 | ### 🐎 [Vapor and Swift Testing: Running tests in parallel](https://www.avanderlee.com/swift-testing/vapor-and-swift-testing-running-tests-in-parallel/) 33 | 34 | [@Smallfly](https://github.com/iostalks):这篇文章探讨了在 Swift 和 Vapor 框架中如何进行并行测试。它解释了 Swift Testing 与 XCTest 的不同,并提出了使用 Repository Pattern 来避免测试中的数据库查询,以实现测试的并行执行。同时还介绍了如何配置和使用内存中的仓库进行测试,并重写代码以通过仓库访问数据,从而提高开发效率和测试稳定性。推荐对 Swift 服务端开发和测试的同学阅读。 35 | 36 | ### 🐎 [Reminder: Apple Watches use 32 bit pointers](https://jeffverkoeyen.com/blog/2024/10/02/arm64_32-PSA/) 37 | 38 | [@极速男孩](https://github.com/ztlyyznf001):Apple Watch 从 Series 4 起采用 arm64_32 架构,虽为 64 位系统,但用 32 位指针。开发者在 watchOS 模拟器中测试时 Int 为 64 位,而在实际硬件上 Int 为 32 位,导致模拟器运行正常的代码在硬件上可能崩溃。例如,处理时间戳的代码可能在 Apple Watch 上失败。所以要在处理 Int 和 CGFloat 时需注意这种差异,确保代码在硬件上也稳定运行。 39 | 40 | ### 🐎 [Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域](https://mp.weixin.qq.com/s/imRQnDJgHTdrcuD5rYQApg) 41 | 42 | [@Crazy](https://github.com/jiyan135960):本文主要介绍了 Flutter 在 3.10 版本里进行的颜色体系更改,首先介绍了 sRGB 和 P3 两种颜色体系的在色域上的区别,从肉眼上看 P3 的颜色更加鲜艳。紧接着文章便介绍了新版本的颜色体系,其中主要对颜色位数做了对比讲解,并且对源码也进行了分析。文章的最后作者更是对现有 API 的现状进行分析,更是对之后的 API 发展情况进行了介绍。 43 | 44 | ## 内推 45 | 46 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 47 | 48 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 49 | 50 | ## 关注我们 51 | 52 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 53 | 54 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 55 | 56 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 57 | 58 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 59 | 60 | ## 说明 61 | 62 | 🚧 表示需某工具,🌟 表示编辑推荐 63 | 64 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 65 | -------------------------------------------------------------------------------- /Reports/2024/#311-2024.11.11.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #311 | 2024-11-11 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/311.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐕 [Migrating Combine to AsyncAlgorithms](https://blog.jacobstechtavern.com/p/migrating-combine-to-asyncalgorithms) 11 | 12 | [@zoeGuo](https://github.com/zoeGuo):Swift Concurrency 发布以来,其设计在许多简单用例上大大超越了 Combine,而在 AsyncAlgorithms 发布之后,Combine 中的许多功能在 Swift Concurrency 中都可以使用。本文以一个示例项目为例,逐步演示了将 Combine 代码迁移到 AsyncAlgorithms 的过程,涵盖了数据源合并、流和节流、以及 CurrentValueSubject 到 AsyncChannel 的转换等常见场景。迁移后代码更简洁易读,易于维护;与 Swift Concurrency 无缝集成,享受异步编程的便利。 13 | 14 | ### 🐕 [Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar](https://www.nutrient.io/blog/swiftui-main-toolbar/) 15 | 16 | [@Barney](https://github.com/BarneyZhaoooo):这篇文章主要探讨了在 SwiftUI 中使用主工具栏的实现方法。作者介绍了 SwiftUI 的 ToolBar 视图及其在 iOS 16 及以上版本中的应用,强调工具栏在提升用户体验和界面整洁性方面的重要性。文章通过示例代码展示了如何创建和自定义工具栏,包括添加按钮、分隔符以及响应用户交互的功能。此外,作者还讨论了工具栏的布局和风格设置,以及如何在不同设备上保持一致的用户体验。 17 | 18 | ### 🐕 [Faster iOS Networking with Shared Dictionary Compression](https://eisel.me/shared-dictionary-compression) 19 | [@JonyFang](https://github.com/JonyFang): 共享字典压缩是一种有效加速 iOS 应用的网络性能的技术,通过在客户端和服务器之间共享数据字典来减少传输数据量。 20 | 21 | ## 工具 22 | 23 | ### [GitHub Copilot 官方发布 Xcode 插件](https://github.blog/changelog/2024-10-29-github-copilot-code-completion-in-xcode-is-now-available-in-public-preview/) 24 | 25 | [@kemchenj](https://kemchenj.github.io/):Xcode 在 AI 补齐的功能上一直落后其它 IDE/Editor,虽然今年 Xcode 也发布了 Code Completion Prediction 功能,但只有国外能用。终于终于,GitHub Copilot 官方在近日发布了 Xcode 插件,让我们也可以用上 AI 补齐的功能: 26 | 27 | - 代码补齐 28 | - 多语言支持,包含 Swift/Objective-C/C/C++/Metal 29 | - 多行代码补齐 30 | - ... 31 | 32 | 周报之前其实也介绍过一款国内工程师开发的 [Copilot Xcode 插件](https://github.com/intitni/CopilotForXcode),经过了解之后发现 GitHub 这次发布的插件其实是 fork 出来的,并且是[已经跟原版作者达成了协议](https://github.com/intitni/CopilotForXcode/discussions/597),GitHub 也[给了一点赞助金给作者](https://x.com/intitni/status/1851352010718880059)。 33 | 34 | 原版后续也会继续维护,而且就目前来说原版的功能甚至比 GitHub 版本更多更丰富。最后想说这大概是我入行以来看到最和谐的一次项目分叉了。 35 | 36 | ## 代码 37 | 38 | ### 🐕 [Metal-Puzzles](https://github.com/abeleinin/Metal-Puzzles) 39 | 40 | [@BluesJiang](https://github.com/bluesjiang):这个代码库提供了一些简单的习题,用来联系编写 Metal 的 Custom Kernel,可以利用在 MLX、Metal Shader 等场景下。对于想学习使用 Metal 加速计算、自己写 Shader 的可以下载下来跟着教程周走一遍。仓库提供了一个测试框架,需要写的代码注意是在 source 变量字符串里。 41 | 42 | ## 内推 43 | 44 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 45 | 46 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 47 | 48 | ## 关注我们 49 | 50 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 51 | 52 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 53 | 54 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 55 | 56 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 57 | 58 | ## 说明 59 | 60 | 🚧 表示需某工具,🌟 表示编辑推荐 61 | 62 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 63 | -------------------------------------------------------------------------------- /Reports/2024/#313-2024.11.25.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #313 | 2024-11-25 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/313.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [Can't install any apps on my new iPhone 16 Pro with iOS 18 from Xcode](https://forums.developer.apple.com/forums/thread/764196?answerId=804884022#804884022) 11 | 12 | 苹果的开发工程师对于从 Xcode 16 Beta/rc 升级到 Xcode 16 正式版用户会遇到无法安装 app 到 iPhone 16 系列手机的问题给出了解决方案:手动通过指令安装 XcodeSystemResources 。该问题在 Xcode 16.1 Beta 2 中修复。 13 | 14 | ``` 15 | sudo installer -pkg /Applications/Xcode.app/Contents/Resources/Packages/XcodeSystemResources.pkg -target / 16 | ``` 17 | 18 | ## 文章 19 | 20 | ### 🐎 [编译器,靠你了!使用类型改善状态设计](https://onevcat.com/2024/11/type-as-state/) 21 | 22 | [@Kyle-Ye](https://github.com/Kyle-Ye): 作者通过一个实际工作中碰到的端到端消息发送的例子,讲述了如何利用 Swift 的类型系统 , 将状态逻辑编码到类型中 , 由编译器来保证程序执行正确性,从而减少使用和维护的心智负担。 23 | 24 | ### 🐕 [MainActor usage in Swift explained to dispatch to the main thread](https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/) 25 | 26 | [@AidenRao](https://weibo.com/AidenRao):在构建应用程序时,在主线程上执行 UI 更新任务是至关重要的,而使用多个后台线程时可能会遇到点麻烦。使用 @MainActor 属性将有助于确保您的 UI 总是在主线程上更新。文章详细解释了什么是 MainActor,全局 actor 的概念,以及如何在 Swift 中使用 MainActor。 27 | 28 | ### 🐎 [Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development?](https://medium.com/@rushabhprajapati20/flutter-vs-kotlin-multiplatform-which-should-you-choose-for-cross-platform-development-4bcf28358918) 29 | 30 | [@Crazy](https://github.com/jiyan135960):从 React Native 开始,移动端的开发就发起了跨平台的改革,如今 Flutter,KMP,C++,都进入了跨平台的研发序列。本文主要对 Flutter 与 Kotlin 两个现今比较火的跨平台框架进行了对比。 31 | 32 | Flutter 平台的优点主要为: 33 | 34 | 1. 统一代码库 35 | 2. 富有表现力和灵活的用户界面 36 | 3. 快速的开发周期 37 | 4. 强大的社区支持 38 | 39 | KMP 平台的优点: 40 | 41 | 1. 原生一般的性能 42 | 2. 高互用性 43 | 3. 高代码共享能力 44 | 4. Google 的支持 45 | 46 | 总结一下:Flutter 主要用于项目启动、 MVP 功能、项目原型、有 UI 统一化的需求开发。KMP 主要用于大项目和已有代码库、需要高性能、需要多平台逻辑分享的功能开发。 47 | 48 | ### 🐢 [Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层](https://mp.weixin.qq.com/s/LW3bASRhA_HL6pS27qUVMA) 49 | 50 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文从原理层讲解了 Overlay 和 OverlayPortal 之间的差异,并且对如何使用 OverlayPortal 做了更深一步的阐述,对于 Flutter 开发的小伙伴来说是一个不错的科普文! 51 | 52 | ### 🐕 [Integrating Live Activity and Dynamic Island in iOS: A Complete Guide](https://canopas.com/integrating-live-activity-and-dynamic-island-in-i-os-a-complete-guide) 53 | 54 | [@Barney](https://github.com/BarneyZhaoooo):本文介绍了关于在 iOS 中集成 Live Activities 和 Dynamic Island 的完整指南。它涵盖了如何创建和管理 Live Activities,以便在锁屏和应用程序上显示实时信息。此外,指南还介绍了如何利用 Dynamic Island 来增强用户体验,让用户能够方便地访问和交互实时通知和活动。可供开发者参考,实现更具动态交互的应用程序。 55 | 56 | ### 🐎 [Swift Format in Xcode](https://troz.net/post/2024/swift_format/) 57 | 58 | [@DylanYang](https://github.com/Dylan19Yang):本文介绍了在 Xcode 16 中首次集成的 swift-format 工具,swift-format 是和 swint-lint 类似的用于规范代码格式的工具。作者写了一段有问题的示例代码,并同时使用 swift-lint、Prettier 和 swift-format 进行代码自动矫正。从表现上来看 swift-format 并不如 swint-lint 一般全能,但是使用十分方便,也支持规则的自定义配置,在配置妥当后已经适用于大部分场景。同时作者也提到目前并没有官方的 Swift code style guidelines, swift-format 目前仅仅只指向了一个方向,具体的规则后面还有改动的可能。 59 | 60 | 61 | ## 内推 62 | 63 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 64 | 65 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 66 | 67 | ## 关注我们 68 | 69 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 70 | 71 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 72 | 73 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 74 | 75 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 76 | 77 | ## 说明 78 | 79 | 🚧 表示需某工具,🌟 表示编辑推荐 80 | 81 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 82 | -------------------------------------------------------------------------------- /Reports/2024/#315-2024.12.09.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #315 | 2024-12-09 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/315.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### [CocoaPods Trunk Read-only Plan](https://blog.cocoapods.org/CocoaPods-Specs-Repo/) 11 | 12 | Cocoapods 为将 Specs 仓库转为只读状态制定了时间表,预计在 2026 年 12 月 2 日正式不再接受新的提交。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常 | 肘子的 Swift 记事本](https://fatbobman.com/zh/posts/the-anomaly-of-onchange-in-swiftui-multi-layer-navigation/) 17 | 18 | [@Barney](https://github.com/BarneyZhaoooo):本文探讨了 SwiftUI 中 `onChange` 的异常行为,特别是在多层导航的情况下。文章分析了在使用 `NavigationView` 和 `NavigationLink` 时,`onChange` 修饰符可能会出现的问题,尤其是当视图层级嵌套较多时。作者提供了几个实际示例,演示如何管理状态变化和确保 `onChange` 正常响应。同时,提供了一些最佳实践,以帮助开发者避免常见陷阱并提升应用性能和用户体验。 19 | 20 | ### 🐕 [Improving the approachability of data-race safety](https://github.com/hborla/swift-evolution/blob/approachable-concurrency-vision/visions/approachable-concurrency.md) 21 | 22 | [@Smallfly](https://github.com/iostalks):这篇文章提出了 Swift 并发特性面临的易用性挑战,包括过多的显式注释、数据竞争误报和异步代码编写困难。文中提出了解决方案包括减少并发注释、调整异步函数语义以减少误报、提供同步和异步代码之间的桥接工具,以及自动迁移代码等。目的是为了让 Swift 并发更易学易用,同时保持高性能。推荐给对 Swift 并发特性演进感兴趣的同学阅读。 23 | 24 | ### 🐎 [深入探讨 C++ 多线程性能优化](https://mp.weixin.qq.com/s/18TujefnTj-17GuNgmYW-Q) 25 | 26 | [@老驴](https://weibo.com/u/6090610445):这篇来自腾讯技术工程的文章从实际案例出发,深入探讨了 C++ 多线程编程中的性能优化问题,包括锁竞争、缓存一致性等难点,并通过详细的 benchmark 数据对比锁与原子操作的性能差异。此外,文章还介绍了如 Epoch Based Reclamation 等高级优化方法。无论是提升性能还是理解底层机制,这篇文章都值得一读。 27 | 28 | 29 | ## 工具 30 | 31 | ### [Xcode + ChatGPT: Official Support is Available Now](https://medium.com/@hiandic/dc21998f3653?source=friends_link&sk=e4dfbadcc5281bd474ecd546b221877e) 32 | 33 | [@EyreFree](https://github.com/EyreFree):这篇文章介绍了 OpenAI 最新宣布的 ChatGPT for macOS 可以直接与 Xcode 集成的功能,除了 Xcode,该功能还支持 VS Code、TextEdit 和 Terminal 等开发工具。使用该功能需要按以下步骤: 34 | 35 | - 目前该功能仅向 ChatGPT Plus 和 Team 用户开放请先确保条件符合,Enterprise 和 Edu 用户将在近期获得访问权限 36 | - 确保 ChatGPT for macOS 应用已更新到最新版本 37 | - 在 ChatGPT 设置中启用 `Enable Work with Apps` 选项以获取辅助功能权限 38 | - 使用快捷键 Option + Space 打开 ChatGPT 聊天栏 39 | - 点击 `Work With Apps` 按钮并选择 Xcode 40 | 41 | 通过这种集成,ChatGPT 可以直接查看和理解开发者的代码库(Codebase),从而提供更准确的回答和建议。作者以开发 SwiftUI 动画的卡片翻转游戏为例,展示了这个新功能的应用。AI 辅助编程近来发展迅速,这次与 Xcode 的原生集成让开发体验更加流畅,标志着 AI 编程助手进入新阶段。 42 | 43 | ### [Easydict: 一个简洁优雅的词典翻译 macOS App](https://github.com/tisfeng/Easydict) 44 | 45 | [@Cooper Chen](https://github.com/cjlcooper):Easydict 是一个开源的词典翻译 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果,目前支持市面上绝多数主流的翻译 App,使用者可以通过 Homrebrew 快速安装使用,Easydict 支持鼠标滑词、OCR 识别等功能,是 Mac 平台上非常高效的翻译软件,值得推荐。 46 | 47 | ## 代码 48 | 49 | ### [swift-sharing](https://github.com/pointfreeco/swift-sharing) 50 | 51 | [@bq](https://github.com/bqlin):如其名,sharing,你能想到的状态共享,跨模块间的状态共享、持久化、观察监听,它都做了,无论是实现业务逻辑、Combine、SwiftUI、UIKit 都能无痛接入。关键人家实现还非常优雅,宏、属性包装器、清晰的职责实现,都是很优秀的实践,单单接入就能让你的代码耳目一新了。还是那句话,Point-Free 出品,必属精品。 52 | 53 | ## 内推 54 | 55 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 56 | 57 | [北京] 比图科技 - 高级 iOS 工程师 58 | 59 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 60 | 61 | ## 关注我们 62 | 63 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 64 | 65 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 66 | 67 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 68 | 69 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 70 | 71 | ## 说明 72 | 73 | 🚧 表示需某工具,🌟 表示编辑推荐 74 | 75 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 76 | -------------------------------------------------------------------------------- /Reports/2024/#316-2024.12.16.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #316 | 2024-12-16 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/316.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### 🐢 [Flutter 3.27 发布](https://mp.weixin.qq.com/s/gQ5u1m7hudyoa-HeLyMKlw) 11 | 12 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.27 悄悄的就来了,该版本包含了大量更新,包括: 13 | 14 | - Cupertino 相关组件的大量优化 15 | - Material 下的一些主题和控件调整,包括之前我们聊过的 Row and Column spacing 16 | - Android Impeller 默认开启和 iOS 性能优化 17 | - P3 色域的 UI 支持 18 | - Web 下的大量改进 19 | - Swift Package Manager 的支持 20 | - 之前聊过的 Edge to Edge 和 Android Freeform 支持 21 | - pub 下载数 22 | - DevTool 工具大改进和优化,包括设备断线数据保持 23 | - 对老 Dart SDK 插件不再维护适配,弃用 OC 24 | 25 | ## 文章 26 | 27 | ### 🐕 [Prevent screenshot capture of sensitive SwiftUI views](https://www.createwithswift.com/prevent-screenshot-capture-of-sensitive-swiftui-views/) 28 | 29 | [@BluesJiang](https://github.com/bluesjiang):这篇文章使用了一个比较巧妙的方法来实现截屏隐藏隐私信息。核心是使用 `UITextField` 的 `isSecureTextEntry` 属性,然后将被包装的 View 作为其子 View 即可。然后使用了 preference 来实现父容器大小与子容器大小匹配。可以通过这个文章整体了解 SwiftUI 的 View 的包装和 Modifier 的写法,是一个很好的参考。 30 | 31 | ### 🐕 [Why Can't You Loop Over Ranges of Characters in Swift](https://mfaani.com/posts/swift/why-cant-you-loop-over-ranges-of-characters-in-swift/) 32 | 33 | [@bq](https://github.com/bqlin):当你对 `"a"..."z"` 执行 for 循环遍历时,你会惊讶地发现 Swift 并不支持的,虽然这有点违反常理。这篇文章你将了解到 Swift 字符并不是简单的 ASCII 字符,而是可变长的 Unicode 字符,其在不同的语言环境有不同的排序,不断迭代的 Unicode 也在不断地扩充字符范围,甚至有些字符是集群的时候,遍历、计数将变得不太可能。文章也介绍了 Unicode 这么设计背后的意图,以及当你硬要遍历一个字符范围时候,作者也给出了一个比较安全的解决方案。 34 | 35 | ### 🐕 [WebKit GPU Profiling](https://developer.playcanvas.com/user-manual/optimization/gpu-profiling/) 36 | 37 | [@莲叔](https://github.com/aaaron7):WebGL 的 debug 一直以来都是一个令人头痛的问题,通过浏览器内置的调试能力能够满足一部分需求,但如果需要更进一步的分析往往都缺乏足够好用的工具。这篇文章针对 WebGL 和 WebGPU 两种应用在不同平台的调试技巧做了汇总,包括 Mac、Window 和 Quest。其中对于在 Mac 上通过 Xcode 来做分析给出了 step by step 的步骤,非常友好。 38 | 39 | ### 🐕 [Concurrency Step-by-Step: Reading from Storage](https://www.massicotte.org/step-by-step-reading-from-storage) 40 | 41 | [@Barney](https://github.com/BarneyZhaoooo):本文提供了关于如何在 Swift 应用中逐步从本地存储读取数据的详细指南。文章重点介绍了如何使用 `Codable` 协议来序列化和反序列化对象,并通过 `FileManager` 管理文件的读取和写入。作者逐步解析了实现这个过程的关键步骤,包括如何设置数据模型、保存数据以及从文件中加载数据的示例代码。此外,文章还提供了常见问题的解决方案,以帮助开发者更有效地处理数据存储。适合想要深入理解 iOS 数据存储机制的开发者阅读。 42 | 43 | ## 代码 44 | 45 | ### [rmtrash](https://github.com/TBXark/rmtrash) 46 | 47 | [@Kyle-Ye](https://github.com/Kyle-Ye): Swift 实现的 macOS 命令行工具 rm 的替代方案,用于将文件移动到废纸篓。此外 rmtrash 提供了与 Linux 和 macOS 版本 rm 命令完全兼容的标志位支持方案。 48 | 49 | ### [ml-cross-entropy](https://github.com/apple/ml-cross-entropy) 50 | 51 | [@Leo](https://github.com/LeoMobileDeveloper):由 Apple 开源的 CCE(Cut Cross-Entrop) 是一种优化小模型(SLM)训练过程中内存消耗的代码库,以 Gemma 2 (2B) 为例,能够将内存从 24GB 优化到 1MB,显著提高小模型的训练速度。 52 | 53 | ## 内推 54 | 55 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 56 | 57 | [北京] 支付宝-终端业务研发专家(支付碰一下) - iOS/Android - P7 58 | 59 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 60 | 61 | ## 关注我们 62 | 63 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 64 | 65 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 66 | 67 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 68 | 69 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 70 | 71 | ## 说明 72 | 73 | 🚧 表示需某工具,🌟 表示编辑推荐 74 | 75 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 76 | -------------------------------------------------------------------------------- /Reports/2024/#318-2024.12.30.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #318 | 2024-12-30 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/318.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | **周报编辑组又来新人啦~** 9 | 10 | 欢迎 [阿权](https://github.com/bqlin) 加入老司机技术,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。 11 | 12 | **希望 阿权 的加入也能为大家带来更多元化的内容输出!** 13 | 14 | ## 文章 15 | 16 | ### 🐕 [Calling Hidden Swift Functions](https://www.emergetools.com/blog/posts/calling-hidden-swift-functions) 17 | 18 | [@AidenRao](https://weibo.com/AidenRao):这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别,从 open 到 private。但是,用 Swift 编写的 Apple 框架(尤其是 SwiftUI)包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。 19 | 20 | ### 🐕 [Be careful wrapping a throwing function in a Task](https://www.swiftwithvincent.com/blog/be-careful-wrapping-a-throwing-function-in-a-task) 21 | 22 | [@Barney](~https://github.com/BarneyZhaoooo~):本文讨论了在 Swift 中将抛出函数包装在 `Task` 中时需要注意的事项。直接在 `Task` 中调用抛出函数可能导致不如预期的行为,因为 `Task` 默认会捕获并处理错误。作者举例说明了如何正确使用 `Task` 来执行抛出函数,并提供了实现的最佳实践,以确保错误被适当地处理。同时,文章还强调了在并发编程中理解错误处理的重要性,帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。 23 | 24 | ### 🐎 [Enhance Xcode Previews with Unit Test Coverage](https://www.emergetools.com/blog/posts/unit-test-xcode-previews/) 25 | 26 | [@DylanYang](https://github.com/Dylan19Yang):本文介绍了如何利用单元测试加强 Xcode Previews 能力的可靠性。Xcode Previews 是一个非常方便的开发工具,但是它在有些时候也非常脆弱,如果有人在一个 view 上添加了 `@EnvironmentObject` 标志,所有调用到这个 view 的 preview 场景如果没有注入这个变量就会发生 crash。在代码量较少时还能及时发现,但是在一个庞大的项目中,view 的层级很深的话很难完全覆盖到所有需要修复的 preview 场景。而借助一个三方的 SnapshotPreviews 框架,它能够自动帮助我们在运行时查找所有实现了 PreviewProvider 的 preview 并添加到单元测试中进行执行。这样可以非常轻松的确保我们的 preview 都能成功运行了。 27 | 28 | ## 代码 29 | 30 | ### MetalLibraryArchive 31 | 32 | MetalLibraryArchive 是一个 Apple 的 metallib 的逆向库,可以解析出 metallib 的 library 类型,目标平台和包含的所有函数。 33 | 34 | 函数的信息包含了: 35 | 36 | - 函数名 37 | - 函数类型 - 例如 vertex/fragment/kernel 等等 38 | - Metal Shading Language 的版本 39 | - 函数的 bitcode 等效表达式(底层使用 llvm-dis) 40 | - 函数源码(如果 metallib 包含了源码的话) 41 | 42 | 另外也提供了一个[在线的 demo](https://yuao.me/MetalLibraryExplorer/),对于想要逆向 Metal 的朋友来说是非常有用的工具。 43 | 44 | ## 音视频 45 | 46 | ### 🐎 [为什么 C 口数据线越来越乱?](https://www.bilibili.com/video/BV1j7zzYGEp9/) 47 | 48 | [@极速男孩](https://github.com/ztlyyznf001):苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线,不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。 49 | 50 | ## 内推 51 | 52 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 53 | 54 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 55 | 56 | ## 关注我们 57 | 58 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 59 | 60 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 61 | 62 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 63 | 64 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 65 | 66 | ## 说明 67 | 68 | 🚧 表示需某工具,🌟 表示编辑推荐 69 | 70 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 71 | -------------------------------------------------------------------------------- /Reports/2025/#319-2025.01.06.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #319 | 2025-01-06 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/319.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 [聊聊 Flutter & Dart 里的内存泄漏和优化,也许没你想的那么复杂](https://mp.weixin.qq.com/s/_88yMWWkLI6fFPHhqMdc2w) 11 | 12 | [@Crazy](https://github.com/jiyan135960):本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题,主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短,作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别,以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中,已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架,来解决关于 context 引用的问题。 13 | 14 | ### 🐕 [百度 APP iOS 端磁盘优化实践(上)](https://mp.weixin.qq.com/s/YNd8-NKVdql3pRNImwxyTA) 15 | 16 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):在 APP 开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题,从 iOS 沙盒文件存储机制出发,系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略,以及多维度触发机制和灵活的用户交互设计,平衡了系统性能与用户体验。 17 | 18 | ### 🐎 [Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing](https://www.adyen.com/knowledge-hub/swift-api-diff) 19 | 20 | [@DylanYang](https://github.com/Dylan19Yang):在 SDK 的维护过程中,检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具,但是对 iOS target 使用会有异常,第二种方式是结合 xcodebuild 和 swift-api-digester,第三种则是作者开源的一个工具 Swift Public API Diff,它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。 21 | 22 | ### 🐢 [Compile Metal shader Bitcode to x86 and ARM assembly](https://worthdoingbadly.com/metalbitcode/) 23 | 24 | [@ChengzhiHuang](https://www.github.com/ChengzhiHuang):作者通过逆向的手段研究了从 metal 代码到 air 文件([LLVM Bitcode](https://llvm.org/docs/BitCodeFormat.html)),最后到 metalib 文件(产物)的过程,期间根据经验进行合理猜测验证,通过寻找原始函数字符串、magic number 、长度偏移量 等还原了文件的结构,并最终提供了将 metalib 文件重新 disassemble 为 air 文件的脚本。 25 | 26 | 最后作者还尝试直接使用 LLVM 将 air 文件重新 compile 成最终的 ARM/x86 的机器码,尽管这些最终产物并不适合直接提交给 GPU 运行,但是也证明了 LLVM 是可以处理来自 metal 的 Bitcode 的。 27 | 28 | 内容与过程非常翔实,推荐工作中需要与 Metal 打交道的同学阅读。 29 | 30 | 前置知识:LLVM 是三段式的设计,而 LLVM 会将 IR 转为 Bitcode ,Bitcode 依旧是可以兼容多平台的中间代码,因此可以最终翻译为各个平台的代码。 31 | 32 | ### 🐢 [什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap](https://mp.weixin.qq.com/s/oiwfzBiednsQQgSCG-K_0g) 33 | 34 | [@CrazyCoderShi](https://github.com/CrazyCoderShi): 如标题所言,Flutter 的 UI 组件编码方式一直被开发者们所诟病,本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化,毕竟末尾的 '括号山' 还是很高的。 35 | 36 | ## 代码 37 | 38 | ### 🐢 [Home Assistant iOS](https://github.com/home-assistant/iOS) 39 | 40 | [@阿权](https://github.com/bqlin):Home Assistant iOS 客户端,代码全部开源。Home Assistant 是一款开源的智能家居自动化平台,允许用户控制所有连接到同一网络的智能家居设备。项目文档详实,甚至面向零基础用户,了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 [Home Assistant Feature overview](https://companion.home-assistant.io/docs/core/)。 41 | 42 | ## 内推 43 | 44 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 45 | 46 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 47 | 48 | ## 关注我们 49 | 50 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 51 | 52 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 53 | 54 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 55 | 56 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 57 | 58 | ## 说明 59 | 60 | 🚧 表示需某工具,🌟 表示编辑推荐 61 | 62 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 63 | -------------------------------------------------------------------------------- /Reports/2025/#320-2025.01.13.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #320 | 2025-01-13 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/320.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | ### 🐎 [Algorithm changes to server connections for Apple Pay on the Web](https://developer.apple.com/news/?id=2x8awlvm) 11 | 12 | [@Damien](https://github.com/ZengyiMa):从 2025 年 2 月 4 日开始,苹果将改变支持 Apple Pay 在 Web 上的服务器连接的安全算法。为了保持服务不间断,你需要确保你的生产服务器在这个日期之前支持指定的[六种密码之一](https://developer.apple.com/documentation/apple_pay_on_the_web/setting_up_your_server#overview)。 13 | 14 | ## 文章 15 | 16 | ### 🐕 [Xcode Library customization with SPM plugin](https://www.artemnovichkov.com/blog/xcode-library-customization-with-spm-plugin) 17 | 18 | [@Kyle-Ye](https://github.com/Kyle-Ye): 本文探讨了如何通过 Swift Package Manager 插件自动将自定义 SwiftUI 视图和修饰符集成到 Xcode Library 中。 19 | 20 | 通过实现 `LibraryContentProvider` 协议,开发者可以将自定义组件引入库中,提升可重用性和发现性。然而,手动维护这些集成可能会很繁琐。作者通过利用 SwiftSyntax,开发了一份插件来自动化此过程,这种方法简化了将自定义组件集成到 Xcode 库中的过程,减少了手动操作和潜在错误。 21 | 22 | ### 🐕 [数据编织在AB实验自动化中的应用 | 京东零售技术实践](https://mp.weixin.qq.com/s/NMPot2AfEtsWXVPowZBDOA) 23 | 24 | [@Barney](https://github.com/BarneyZhaoooo):本文讨论了数据编织在 AB 实验中的应用,强调其重要性以及面临的数据科学性、一致性和时效性挑战,并提出相应的自动化解决方案。内容涵盖数据编织的管理理念、逻辑数据平台构建、标准语义建立及自动编排等关键技术。最后,展示了 AB 实验链路的自动化实施进展及未来规划,强调提升交付效率和数据治理的必要性。 25 | 26 | ### 🐢[使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南](https://mp.weixin.qq.com/s/3qDQJXXiVl9gF-q5KtbxVw) 27 | 28 | [@阿权](https://github.com/bqlin):文章本是 APMPlus 的软文,一套全面的性能监控的解决方案,但偏偏还为大家罗列了 21 条内存管理的最佳实践,并介绍了 OOM 监控的基本原理与手段。干货满满,都是我们日常开发中高频遇到的场景,或许它能成为内存问题踩坑时的自查小册。 29 | 30 | ### 🐕 [What happens when you move a file in git?](https://swiftrocks.com/what-happens-when-you-move-a-file-in-git) 31 | 32 | [@JonyFang](https://github.com/jonyfang): 文章主要介绍了在 Git 中移动或重命名文件及文件夹时的内部工作原理,包括文件以快照形式存储、文件夹与提交的关联、重命名或移动操作对存储的影响及优化方法,还提及了大文件的特殊处理情况。文中对 Git 文件的操作机制的介绍,对日常开发中文件结构调整会有帮助,降低因操作不当引发的仓库性能问题风险。 33 | 34 | ## 代码 35 | 36 | ### 🚧 [Now we’re all Forked!](https://appdecentral.com/2024/12/13/now-we-are-all-forked) 37 | 38 | [@Cooper Chen](https://github.com/cjlcooper):Forked 是一个简化共享数据管理的 Swift 工具,专为多设备数据同步和冲突解决设计。借鉴 Git 的分支和合并机制,Forked 能轻松实现三方合并(3-way merge),并自动处理并发冲突。该工具支持与 iCloud 等云服务同步,确保跨设备的数据一致性,并通过简洁的 API 帮助开发者快速实现数据合并和冲突解决。无论是离线编辑还是实时协作,Forked 都能提供高效、可靠的数据管理方案。如果你需要在应用中实现智能数据同步和冲突解决,Forked 是一个理想选择。了解更多并开始使用 Forked,查看官方文档:[Forked GitHub 仓库](https://github.com/drewmccormack/Forked)。 39 | 40 | ### 🐢 [解密小红书与美团的合作案例](https://www.xiaoyuzhoufm.com/episode/676e5d051e823e72d332d12e) 41 | 42 | [@EyreFree](https://github.com/EyreFree):播客主要探讨了小红书与美团两大平台的战略合作,美团正在寻求从单纯的效果营销转向更注重品牌价值和用户心智的增长方式,而小红书则凭借其独特的内容生态和用户群体特征,成为流行生活趋势的策源地。双方合作的核心在于优势互补:美团有流量但缺乏优质内容,小红书拥有丰富的 UGC 内容但需要商业变现出口。这次合作反映了内容平台与交易平台的融合趋势,也展示了"反漏斗模型"在实际商业场景中的应用。虽然可能离具体的技术开发较远,但对互联网商业逻辑感兴趣的朋友可以听一下。 43 | 44 | ## 内推 45 | 46 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 47 | 48 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 49 | 50 | ## 关注我们 51 | 52 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 53 | 54 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 55 | 56 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 57 | 58 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 59 | 60 | ## 说明 61 | 62 | 🚧 表示需某工具,🌟 表示编辑推荐 63 | 64 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 65 | -------------------------------------------------------------------------------- /Reports/2025/#325-2025.03.03.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #325 | 2025-03-03 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/325.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐎 [Presenting and Managing Expandable Sections in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/presenting-and-managing-expandable-sections-in-swiftui/) 11 | 12 | [@DylanYang](https://github.com/Dylan19Yang):作者为我们介绍了如何在 SwiftUI 中实现一个可通过交互来展开和收起的 Section。在 Section 的 header 上实现一个自定义 view,并在点击时反转 Section 的 isExpanded 属性来达成目标。文章内容非常简单基础,并且有丰富的代码演示,适合刚接触 SwiftUI 的同学学习。 13 | 14 | ### 🐕 [First analysis of Apple's USB Restricted Mode bypass (CVE-2025-24200)](https://blog.quarkslab.com/first-analysis-of-apples-usb-restricted-mode-bypass-cve-2025-24200.html) 15 | 16 | [@david-clang](https://github.com/david-clang):本文分析了 iOS 中 [CVE-2025-24200](https://support.apple.com/en-ca/122174) 漏洞的技术细节,该漏洞利用 Accessibility 框架中状态管理不严密的问题,使得攻击者能够在设备锁定时绕过 [USB Restricted Mode](https://support.apple.com/en-us/111806),从而实现未授权的 USB 数据连接。文章中的分析思路和手段很值得学习。 17 | 18 | 作者通过对比补丁前后的固件,详细说明了漏洞修复涉及的关键代码改动,例如在 AXSpringBoardServerInstance 和 profiled 守护进程中新增的状态检查逻辑。接着展示了利用辅助功能(如 Assistive Touch 或 Switch Control )触发漏洞的可能攻击路径,即在设备锁定且辅助功能激活时,通过触发警告弹窗诱导用户点击“ OK ”,进而调用 `_setUSBRMPreferenceDisabled` 函数禁用 USB Restricted Mode,使攻击者有机会绕过物理安全防护措施。 19 | 20 | ### 🐎 [How Swift's server support powers Things Cloud](https://www.swift.org/blog/how-swifts-server-support-powers-things-cloud/) 21 | 22 | [@阿权](https://github.com/bqlin):文章分享了 Things App 如何将自身的后端服务使用 Swift 重写的经验。 23 | 24 | Things Cloud(Things App 后端服务),原本是使用 Python 2 和 Google App Engine 构建的,虽然稳定,但面临内存占用高、响应速度慢、后端语言缺乏类型静态安全检查导致上线错误不可预知的问题。在探索了多种后端语言后,因为 Things App 开发已经深度使用 Swift,熟悉其优势(可能是客户端人力充足🐶),最终选择使用 Swift 重写后端。使用 Vapor + SwiftNIO 编写主要的后端业务,通过 RediStack 调用 Rdis、MySQLKit 调用 Aurora、Soto 调用 S3、APNSwift 调用 APNs。最终通过 Linux 编译产物,构建到 Docker 中以便部署到集群中。最终算力节省 3 倍多,响应时间缩短 4 倍多。 25 | 26 | 在降本增效的大流中,或许用 Swift 也能闯出一番天地。 27 | 28 | ### 🐕 [What ’ s new in Swift 6.1?](https://www.donnywals.com/whats-new-in-swift-6-1/) 29 | 30 | [@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 的最新特性和改进。Swift 6.1 是一个较小的版本,主要包含错误修复和用户体验提升。其中主要讨论了两个特性: 31 | 1. **Task Groups 的变化**:Swift 6.1 对 TaskGroup 进行了改进,开发者不再需要显式定义子任务的返回类型。编译器可以根据第一个添加的任务自动推断类型,这样可以简化代码。 32 | 2. **导入成员可见性的新模式**:Swift 6.1 引入了一种新的成员可见性模式,允许开发者在导入特定模块时,仅使用该模块中的扩展。这解决了当多个模块中有相同函数名时,编译器可能产生混淆的问题。通过这种方式,开发者可以更明确地控制代码中使用的扩展,避免意外调用错误版本的函数。 33 | 34 | 总体而言,这些改进增强了 Swift 的易用性,提升了开发体验。 35 | 36 | ## 工具 37 | 38 | ### 🐎 [Interactive & Beautiful CLI Tools with Noora](https://swifttoolkit.dev/posts/noora-package) 39 | 40 | [@Smallfly](https://github.com/iostalks):Noora 是一款创新性的 Swift 命令行工具包,致力于将枯燥的黑白终端转化为专业、交互式的开发者体验。它提供了丰富的组件——从醒目的成功 / 错误提示、智能的 Yes/No 选择框,到动态进度指示器,再到灵活的主题定制功能——让 CLI 工具瞬间焕发活力。如果你的应用需要进行命令行交互,值得一试。 41 | 42 | ### 🐎 [基于 WWDC 内容的 AI 问答平台 Ask WWDC](https://askwwdc.com) 43 | 44 | [@xiaofei86](https://github.com/xiaofei86):Ask WWDC 以 WWDC 内容对 LLM 进行检索增强。基于 LangChain 和 GPT-4o,目前免费使用,响应速度尚可。作者同时开放了其基于 Next.js、Upstash 和 ModalLabs 的服务,用户也可以构建自己的 Ask Site。 45 | 46 | ## 内推 47 | 48 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 49 | 50 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 51 | 52 | ## 关注我们 53 | 54 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 55 | 56 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 57 | 58 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 59 | 60 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 61 | 62 | ## 说明 63 | 64 | 🚧 表示需某工具,🌟 表示编辑推荐 65 | 66 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 67 | -------------------------------------------------------------------------------- /Reports/2025/#329-2025.03.31.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #329 | 2025-03-31 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/329.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐎 [Understanding structural identity in SwiftUI](https://tanaschita.com/swiftui-structural-identity/) 11 | 12 | [@阿权](https://github.com/bqlin):SwiftUI 使用结构体描述视图,由 SwiftUI 内部完成视图的绘制与更新。而结构体标识则是视图层级中的唯一 id,用于识别状态变化前后的视图结构体是否是同一视图,进而进行更新和重绘。 13 | 14 | 文章介绍了 SwiftUI 结构体标识的基本原理和应用、SwiftUI 重绘机制以及 SwiftUI 结构体标识的具体实践。 15 | 16 | ## 文章 17 | 18 | ### 🐢 [Profiling apps using Instruments](https://developer.apple.com/tutorials/instruments) 19 | 20 | [@Smallfly](https://github.com/iostalks):这是苹果官方出品的 Instruments 教程。Instruments 主要用来分析应用程序的性能、资源使用和行为,了解如何提高响应性,减少内存使用,以及运行时的复杂的行为。该教程包含对卡顿的基础知识介绍,卡顿的分析和检测,并提供了卡顿的优化建议。 21 | 22 | ### 🐢 [充分理解 C/C++ 重要概念:运行时库](https://mp.weixin.qq.com/s/Fed-0uVaOGDUiftH43vnGA) 23 | 24 | [@极速男孩](https://github.com/ztlyyznf001):本文系统解析了 C/C++ 运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统 API(如内存管理 malloc/ 文件操作 fopen)、提供标准库函数(字符串 / 数学运算),并管理程序生命周期(全局变量初始化 / 资源清理)。跨平台差异显著:Linux 依赖 glibc/libstdc++,Windows 通过 MSVC 运行时库实现,Android/iOS 则采用轻量化 Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI 不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递 C++ 对象)及固化工具链版本。 25 | 26 | ### 🐕 [Detecting body poses in a live video feed](https://www.createwithswift.com/detecting-body-poses-in-a-live-video-feed/) 27 | 28 | [@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何利用苹果的 Vision 框架在 SwiftUI 应用中实时检测视频流中的人体姿态。主要步骤包括: 29 | 30 | 1. 通过 `AVCaptureSession` 管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示 31 | 2. 使用 `UIViewRepresentable` 协议将 `AVCaptureVideoPreviewLayer` 集成到 SwiftUI 视图中,实现实时画面展示 32 | 3. 创建 `PoseEstimationViewModel` 类处理视频帧,利用 Vision 的 `VNHumanBodyPoseRequest` 检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 33 | 4. 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果 34 | 35 | 文章提供了完整的代码实现思路,适用于健身追踪、AR 等场景开发。 36 | 37 | ### 🐎 [Why I Avoid Group](https://chris.eidhof.nl/post/why-i-avoid-group/) 38 | 39 | [@DylanYang](https://github.com/Dylan19Yang):作者通过一系列的 Demo 向我们展示了 Group 目前存在的一些问题。官方文档上写着作用于 Group 的 modifier 会作用在 Group 内的每一个元素上,但实际在模拟器上的表现并非如此。作者猜测可能和渲染 SwiftUI 的根结点实质是一个 UIKit 的 view 有关。如果使用一个 VStack 包裹 Group,则它的表现又符合预期了。 40 | 41 | ### 🐎 [这篇 GPU 学习笔记,详细整理了其工作原理、编程模型和架构设计](https://mp.weixin.qq.com/s/IzsI_dzX6AxFnJGg8zewEw) 42 | 43 | [@老驴](https://weibo.com/u/6090610445):最近 AI 大火也让 nvidia 再次在风口浪尖烧,你有没有想过 GPU 到底是怎么工作的?它为什么在特定应用下这么快?和我们日常写的代码、性能优化有什么关系? 44 | 45 | 这篇文章用清晰的逻辑和大量实例,从 GPU 架构原理、并行执行模型到实际的 CUDA 编程,带你系统了解 GPU 背后的技术基础。即使你平时不写 CUDA,这些知识也能帮你更好地理解 Metal、CoreML 这些 Apple 平台下的 GPU 特性。 46 | 47 | 如果你是一名希望拓展技术广度的开发者,值得一读。 48 | 49 | ## 代码 50 | 51 | ### [FlowNavigation](https://github.com/magnuskahr/swiftui-flow-navigation) 52 | 53 | [Announcing FlowNavigation](https://www.magnuskahr.dk/posts/2025/03/announcing-FlowNavigation/) 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理 , 如注册流程。作者提供了一个示例代码 , 展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。 54 | 55 | ## 内推 56 | 57 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 58 | 59 | [上海] Soul App - 终端技术团队 - iOS 架构/跨端容器专家 60 | 61 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 62 | 63 | ## 关注我们 64 | 65 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 66 | 67 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 68 | 69 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 70 | 71 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 72 | 73 | ## 说明 74 | 75 | 🚧 表示需某工具,🌟 表示编辑推荐 76 | 77 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 78 | -------------------------------------------------------------------------------- /Reports/2025/#331-2025.04.14.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #331 | 2025-04-14 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/331.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新手推荐 9 | 10 | ### 🐎 [Building a dependency injection framework](https://tanaschita.com/dependency-injection-building-lightweight-container/) 11 | 12 | [@阿权](https://github.com/bqlin):文章介绍了在 Swift 中如何从零到一搭建轻量级级依赖注入(DI)容器,内容包括: 13 | 14 | 1. DI 容器设计:实现注册(`register`)和解析(`resolve`)依赖的基本功能,通过字典存储类型与工厂函数的映射。 15 | 2. 生命周期管理:使用枚举 `DependencyLifetime` 区分瞬态(每次解析创建新实例)和单例(首次解析创建并缓存),通过单独的字典存储单例实例。 16 | 3. 属性包装器 `@Injected`:简化依赖注入,声明属性时自动从容器解析依赖,提升代码简洁性。 17 | 4. 实战示例:通过协议定义、容器配置和 SwiftUI 集成演示完整流程。 18 | 19 | 文章中的实现覆盖了 DI 的核心机制,有了这篇文章的基础,推荐大家再去阅读 [Swinject](https://github.com/Swinject/Swinject) 的实现,会对 DI 的实现有更深刻的理解。 20 | 21 | ## 文章 22 | 23 | ### 🐎 [注意,暂时不要升级 MacOS ,Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」被拒绝](https://mp.weixin.qq.com/s/s9fJWOJNhOf9Beu60VDQUA) 24 | 25 | [@david-clang](https://github.com/david-clang):macOS 15.4 会导致 Flutter/RN 构建产物新增无效文件夹 `.Symbols` ,提交 App Store 审核会被拒。虽然文章还提供了临时解决办法,但还是建议非必要先不升级,因为调试 Flutter iOS 模拟器时会遇到 `flutter attach` 失效,无法 hot reload ([#166333](https://github.com/flutter/flutter/issues/166333)),该问题还没好的解决办法,可用真机调试先绕过。 26 | 27 | ### 🐕 [New in Swift 6.1: Test Scoping Traits](https://www.pointfree.co/blog/posts/169-new-in-swift-6-1-test-scoping-traits) 28 | 29 | [@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 引入的 Test Scoping Traits 新特性,它彻底改变了测试代码的编写方式。通过自定义 TestTrait,开发者可以更优雅地管理测试上下文和全局状态,特别适合依赖注入和快照测试等场景。 30 | 新特性主要优势包括: 31 | 1. 简化测试代码:用 @Test(.trait) 替代复杂的闭包嵌套 32 | 2. 支持并发安全:完美适配 Swift Testing 的并行测试 33 | 3. 三大流行库已适配:Dependencies、SnapshotTesting 和 MacroTesting 都支持新特性 34 | 35 | 现在升级到最新版本即可体验这些改进,让测试代码更简洁高效。 36 | 37 | ### 🐕 [Swiftdata Architecture Patterns And Practices](https://azamsharp.com/2025/03/28/swiftdata-architecture-patterns-and-practices.html) 38 | 39 | [@Barney](https://github.com/BarneyZhaoooo):本文以预算管理为例,展示了 Swift 原生框架下数据驱动的开发范式。主要介绍了苹果专为 `SwiftUI` 设计的 `SwiftData`。 40 | 核心特性包括: 41 | **1** **声明式建模** :`@Model` 宏简化模型定义,支持 `Codable` 类型与唯一性约束; 42 | **2** **深度 SwiftUI 整合** :`@Query` 动态追踪数据变化,视图自动刷新; 43 | **3** **业务逻辑内聚** :模型类直接嵌入唯一性验证、金额计算等规则; 44 | **4** **灵活架构** :可选协议抽象数据层,适配长期维护或框架迁移; 45 | **5** **云同步与预览** :默认 `CloudKit` 私有库同步,`PreviewModifier` 快速注入测试数据。 46 | 47 | ## 工具 48 | 49 | ### 🐎 [Introducing swiftly 1.0](https://www.swift.org/blog/introducing-swiftly_10/) 50 | 51 | [@DylanYang](https://github.com/Dylan19Yang):Swift 正式发布了它的工具链版本管理工具 swiftly,它可以帮助开发者更方便的在不同的平台上下载、安装指定版本的 Swift。借助 swiftly 的版本申明,可以更简单的在团队开发或者 CI/CD 环境中保持 Swift 的版本一致性。swiftly 一大亮点是它自身是由 Swift 开发而成的,因此它可以直接使用 Swift 内的标准库处理 HTTP 请求和文件系统读写等场景,它也利用可以和 C 桥接的特性使用了 C 的压缩库。对具体的使用方式感兴趣的同学可以阅读文章做进一步的了解。 52 | 53 | ## 音视频 54 | 55 | ### 🐢 [Spatial Rendering for Apple Vision Pro with ARKit, Metal, and Compositor Services by Warren Moore](https://www.youtube.com/watch?v=vO0M4c9mb2E) 56 | 57 | [@BluesJiang](https://github.com/BluesJiang): 《Metal by Example》的作者亲自亲自视频授课。这个视频介绍了 Vision Pro 上做 3D 内容所涵盖的所有知识点,包括 ARKit 渲染,Metal 渲染,自定义渲染器,空间手势,手部追踪,物理等,内容覆盖的很全面,适合想了解 VisionOS 在 3D 渲染方面如何切入的读者。视频作者的书也很值得跟着学一学。 58 | 59 | 60 | ## 内推 61 | 62 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 63 | 64 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 65 | 66 | ## 关注我们 67 | 68 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 69 | 70 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 71 | 72 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 73 | 74 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 75 | 76 | ## 说明 77 | 78 | 🚧 表示需某工具,🌟 表示编辑推荐 79 | 80 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 81 | -------------------------------------------------------------------------------- /Reports/2025/#332-2025.04.21.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #332 | 2025-04-21 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/332.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 文章 9 | 10 | ### 🐕 [DocC for Multi-Platform Documentation](https://alexanderweiss.dev/blog/2025-03-09-docc-for-multi-platform-documentation) 11 | 12 | [@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何手动创建 Swift 包的跨平台文档。虽然 DocC SPM 插件最近添加了对多目标文档生成的支持,但目前仍不支持跨平台包的文档生成。作者分享了一种解决方案,通过直接使用 Xcode 自带的 DocC 工具来实现。 13 | 14 | 文章详细讲解了三个主要步骤: 15 | 1. 为各平台构建项目并生成符号图 16 | 2. 将.docc 包转换为 DocC 存档 17 | 3. 将存档处理成可托管的 HTML 文件 18 | 19 | 作者提供了完整的代码示例,包括如何设置 DocC 包结构、创建 Info.plist 文件定义各平台的部署目标,以及编写 shell 脚本来自动化整个构建过程。这种方法可以有效地显示每个 API 在 iOS、watchOS、visionOS、tvOS 和 macOS 上的可用性。 20 | 21 | ### 🐕 [iOS 静态代码检查方案解读](https://mp.weixin.qq.com/s/yYmwuD3wl77Je4m1zFGfWQ) 22 | 23 | [@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章对比了 iOS 开发中三大主流静态代码检查工具:SonarQube、Infer 和 Clang Static Analyzer。SonarQube 存在资源消耗大、配置复杂及 Xcode 适配等问题;Infer 存在语言局限和误报、漏报等问题;Xcode 原生集成的 Clang Static Analyzer,相比 SonarQube 和 Infer,Clang 静态分析在底层问题检测、编译阶段的高效性和多语言支持方面具有显著优势。其凭借增量分析、路径敏感检测和零配置优势,通过脚本筛选增量文件并转换分析结果,可以实现高效自动化检查与定制化报告生成,成为平衡开发效率与质量的中大型项目优选方案。 24 | 25 | ### 🐕 [How to inspect .ipa files and secure your iOS app from common mistakes](https://www.artemnovichkov.com/blog/how-to-inspect-ipa-files) 26 | 27 | [@Barney](https://github.com/BarneyZhaoooo):本文介绍了如何检查 iOS 应用的 .ipa 文件结构,揭示潜在安全隐患。通过 Apple Configurator 等工具获取 .ipa 文件后,可解压分析 Info.plist(含明文密钥 /URL scheme)、Frameworks(第三方 SDK)和 Resources(测试账户 / 配置文件)。并提出三准则:勿在 Info.plist 存敏感数据,移除开发测试资料,避免明文存储密钥。强调攻击者常用逆向工具(如 Hopper)解析未加密信息,开发者应定期自查 .ipa 文件,强化安全防护。 28 | 29 | ### 🐎 [你为什么需要了解 Dart AST?一个简单的 bug 带你快速认识下 Dart Kernel AST](https://mp.weixin.qq.com/s/DgC0C3U9-9u8KFeM4Ud6mw) 30 | 31 | [@david-clang](https://github.com/david-clang):作者在调用 extension 拓展 BuildContext 的 context.l10n 时报运行时错误 `NoSuchMethodError`,最终通过 [ast_to_text.dart](https://github.com/dart-lang/sdk/blob/ee32a22712b64006b98a3923ff77f4d9476e2f84/pkg/kernel/lib/text/ast_to_text.dart#L5) 相关工具将 IR 层的 dill 文件转成可读文本,定位到问题根本原因是未显式声明函数参数是 BuildContext 类型,导致编译时 context 被推断为 dynamic 类型,最终导致运行时 `NoSuchMethodError` 错误。文章里通过分析 Dart AST 来找到代码根本问题的思路值得我们学习。 32 | 33 | ### 🐎 [SwiftUI Keyboard Shortcut Scope](https://useyourloaf.com/blog/swiftui-keyboard-shortcut-scope/) 34 | [@Smallfly](https://github.com/iostalks):本文聚焦 SwiftUI 键盘快捷键的「跨视图生效」问题,当控件通过导航跳转离开屏幕时,其关联的快捷键仍被系统识别并响应,导致操作冲突。核心原因是系统按视图层级解析快捷键,而非视图可见性。解决方案是利用状态变量动态禁用父视图控件,间接关闭其快捷键响应。若你在 SwiftUI 开发中需精准管理多层级导航的快捷键作用域,本文可帮助你快速定位逻辑隐患。 35 | 36 | ## 代码 37 | 38 | ### 🐎 [Supercharging SwiftUI Text with Dynamic Content Styling](https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling) 39 | 40 | [@阿权](https://github.com/bqlin):文章提供了一种扩展 SwiftUI `Text` 视图的思路,通过自定义文本替换规则,允许对文本中的特定字符串(如单词或段落)应用自定义样式。核心实现包括: 41 | 42 | 1. `TextReplacementView`:提供单个或多个替换规则的初始化接口。 43 | 2. `processReplacements`:查找文本中的匹配范围,按顺序处理非重叠替换,拼接生成带有不同样式的 `Text` 视图。 44 | 45 | 文章最后展示了简单和复杂场景下的用法,支持灵活的视图修饰符(如字体、颜色、斜体等)。其优势在于简化了原有通过组合多个 `Text` 视图实现样式定制的繁琐流程,提供了更统一的解决方案。 46 | 47 | 更详细的实现和用法可前往开源库 [TextReplacements](https://github.com/danielsaidi/TextReplacements)。 48 | 49 | ## 内推 50 | 51 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 52 | 53 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 54 | 55 | ## 关注我们 56 | 57 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 58 | 59 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 60 | 61 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 62 | 63 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 64 | 65 | ## 说明 66 | 67 | 🚧 表示需某工具,🌟 表示编辑推荐 68 | 69 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 70 | -------------------------------------------------------------------------------- /Reports/2025/#337-2025.06.09.md: -------------------------------------------------------------------------------- 1 | # 老司机 iOS 周报 #337 | 2025-06-09 2 | 3 | ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/337.jpg?raw=true) 4 | 老司机 iOS 周报,只为你呈现有价值的信息。 5 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 7 | 8 | ## 新闻 9 | 10 | > 行业相关的新闻、趣事、看法 11 | 12 | ##  Developer - 设计开发加速器 13 | 14 | > 设计开发加速器相关活动 15 | 16 | ## 新手推荐 17 | 18 | > 收集一些对新手友好且质量不错的文章 19 | 20 | ## 文章 21 | 22 | ### 🐕 [Optimized mathematical computations in Swift](https://swiftwithmajid.com/2025/05/13/optimized-mathematical-computations-in-swift/) 23 | 24 | [@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍如何用 `Swift` 的 `Accelerate` 框架 (特别是 `vDSP` 模块) 高效处理大规模数学计算 (如求和、平均值、标准差)。它替代传统低效方法(如 `reduce`), 显著提升大数据场景性能 (如百万级健康数据点)。核心展示了 `vDSP.sum`、`vDSP.mean` 和 `vDSP.standardDeviation` 的简洁用法,并指出该框架还支持更复杂计算(如机器学习、信号处理)。 25 | 26 | ## 工具 27 | 28 | > 开发过程中常用的工具,及一些新工具的介绍 29 | 30 | ## 代码 31 | 32 | > 库,代码段,开源app 33 | 34 | ### [Swift Embedded ESP32C6 OLED Demo](https://github.com/CmST0us/swift-embedded-xiao-esp32c6-expansion_board) 35 | 36 | [@Kyle-Ye](https://github.com/Kyle-Ye): 这个项目展示了如何在 ESP32C6 嵌入式环境中使用 Swift 进行开发,实现了在 OLED 显示屏上渲染旋转 3D 立方体动画。项目的亮点在于演示了 Swift Package Manager 与 CMake 的集成方案,提供了完整的 Swift 嵌入式开发工作流。特别值得关注的是其解决了 Swift 与 C 互操作时的符号链接问题,以及 U8g2 字体优化方案。对于想要探索 Swift 在嵌入式领域应用的开发者来说,这是一个很好的实践参考项目。 37 | 38 | ## 书 39 | 40 | > 比较不错的书的推荐和书评 41 | 42 | ## 音视频 43 | 44 | > 比较不错的书的推荐和书评 45 | 46 | ## 内推 47 | 48 | 重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 49 | 50 | 具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) 51 | 52 | ## 关注我们 53 | 54 | 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 55 | 56 | **关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** 57 | 58 | ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) 59 | 60 | 同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 61 | 62 | ## 说明 63 | 64 | 🚧 表示需某工具,🌟 表示编辑推荐 65 | 66 | 预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) 67 | -------------------------------------------------------------------------------- /assets/author/100mango.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/100mango.png -------------------------------------------------------------------------------- /assets/author/BluesJiang.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/BluesJiang.jpeg -------------------------------------------------------------------------------- /assets/author/ChinaFishNews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/ChinaFishNews.png -------------------------------------------------------------------------------- /assets/author/CooperChen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/CooperChen.png -------------------------------------------------------------------------------- /assets/author/CrazyCoderShi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/CrazyCoderShi.png -------------------------------------------------------------------------------- /assets/author/Damonvvong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/Damonvvong.png -------------------------------------------------------------------------------- /assets/author/David.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/David.png -------------------------------------------------------------------------------- /assets/author/DylanYang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/DylanYang.png -------------------------------------------------------------------------------- /assets/author/EyreFree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/EyreFree.png -------------------------------------------------------------------------------- /assets/author/GesanTung.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/GesanTung.png -------------------------------------------------------------------------------- /assets/author/JonyFang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/JonyFang.png -------------------------------------------------------------------------------- /assets/author/Kyle-Ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/Kyle-Ye.png -------------------------------------------------------------------------------- /assets/author/KyoLi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/KyoLi.png -------------------------------------------------------------------------------- /assets/author/LeoMobileDeveloper.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/LeoMobileDeveloper.jpeg -------------------------------------------------------------------------------- /assets/author/ParsifalC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/ParsifalC.png -------------------------------------------------------------------------------- /assets/author/SatanWoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/SatanWoo.png -------------------------------------------------------------------------------- /assets/author/ZengyiMa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/ZengyiMa.png -------------------------------------------------------------------------------- /assets/author/aaaron7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/aaaron7.png -------------------------------------------------------------------------------- /assets/author/anotheren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/anotheren.png -------------------------------------------------------------------------------- /assets/author/awhisper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/awhisper.png -------------------------------------------------------------------------------- /assets/author/barney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/barney.png -------------------------------------------------------------------------------- /assets/author/bq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/bq.png -------------------------------------------------------------------------------- /assets/author/chengzhi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/chengzhi.png -------------------------------------------------------------------------------- /assets/author/iblacksun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/iblacksun.png -------------------------------------------------------------------------------- /assets/author/iostalks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/iostalks.png -------------------------------------------------------------------------------- /assets/author/jiyan135960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/jiyan135960.png -------------------------------------------------------------------------------- /assets/author/josephchang10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/josephchang10.png -------------------------------------------------------------------------------- /assets/author/kemchenj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/kemchenj.png -------------------------------------------------------------------------------- /assets/author/knightsj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/knightsj.png -------------------------------------------------------------------------------- /assets/author/lacklock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/lacklock.png -------------------------------------------------------------------------------- /assets/author/linwenbang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/linwenbang.png -------------------------------------------------------------------------------- /assets/author/looping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/looping.png -------------------------------------------------------------------------------- /assets/author/mmoaay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/mmoaay.png -------------------------------------------------------------------------------- /assets/author/nianran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/nianran.png -------------------------------------------------------------------------------- /assets/author/olddonkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/olddonkey.png -------------------------------------------------------------------------------- /assets/author/raozhizhen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/raozhizhen.png -------------------------------------------------------------------------------- /assets/author/tom510230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/tom510230.png -------------------------------------------------------------------------------- /assets/author/waterXu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/waterXu.png -------------------------------------------------------------------------------- /assets/author/waz0820.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/waz0820.png -------------------------------------------------------------------------------- /assets/author/xiaofei86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/xiaofei86.png -------------------------------------------------------------------------------- /assets/author/yxztj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/yxztj.png -------------------------------------------------------------------------------- /assets/author/zangqilong198812.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/zangqilong198812.png -------------------------------------------------------------------------------- /assets/author/zoeGuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/zoeGuo.png -------------------------------------------------------------------------------- /assets/author/ztlyyznf001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/ztlyyznf001.png -------------------------------------------------------------------------------- /assets/author/zvving.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/author/zvving.png -------------------------------------------------------------------------------- /assets/iOSdev.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/iOSdev.jpg -------------------------------------------------------------------------------- /assets/ios-weekly-avatar-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly-avatar-transparent.png -------------------------------------------------------------------------------- /assets/ios-weekly-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly-avatar.png -------------------------------------------------------------------------------- /assets/ios-weekly-juejin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly-juejin.png -------------------------------------------------------------------------------- /assets/ios-weekly-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly-logo.png -------------------------------------------------------------------------------- /assets/ios-weekly-wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly-wechat.png -------------------------------------------------------------------------------- /assets/ios-weekly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/ios-weekly.png -------------------------------------------------------------------------------- /assets/qrcode_for_wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/qrcode_for_wechat.jpg -------------------------------------------------------------------------------- /assets/release_only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/release_only.png -------------------------------------------------------------------------------- /assets/weekly-header/247.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/247.png -------------------------------------------------------------------------------- /assets/weekly-header/248.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/248.jpg -------------------------------------------------------------------------------- /assets/weekly-header/249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/249.png -------------------------------------------------------------------------------- /assets/weekly-header/250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/250.png -------------------------------------------------------------------------------- /assets/weekly-header/251.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/251.png -------------------------------------------------------------------------------- /assets/weekly-header/252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/252.png -------------------------------------------------------------------------------- /assets/weekly-header/253.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/253.png -------------------------------------------------------------------------------- /assets/weekly-header/254.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/254.png -------------------------------------------------------------------------------- /assets/weekly-header/255.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/255.png -------------------------------------------------------------------------------- /assets/weekly-header/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/256.png -------------------------------------------------------------------------------- /assets/weekly-header/257.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/257.png -------------------------------------------------------------------------------- /assets/weekly-header/258.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/258.png -------------------------------------------------------------------------------- /assets/weekly-header/259.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/259.png -------------------------------------------------------------------------------- /assets/weekly-header/260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/260.png -------------------------------------------------------------------------------- /assets/weekly-header/261.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/261.png -------------------------------------------------------------------------------- /assets/weekly-header/262.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/262.png -------------------------------------------------------------------------------- /assets/weekly-header/263.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/263.png -------------------------------------------------------------------------------- /assets/weekly-header/264.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/264.png -------------------------------------------------------------------------------- /assets/weekly-header/265.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/265.png -------------------------------------------------------------------------------- /assets/weekly-header/266.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/266.jpg -------------------------------------------------------------------------------- /assets/weekly-header/267.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/267.jpg -------------------------------------------------------------------------------- /assets/weekly-header/268.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/268.jpg -------------------------------------------------------------------------------- /assets/weekly-header/269.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/269.jpg -------------------------------------------------------------------------------- /assets/weekly-header/270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/270.jpg -------------------------------------------------------------------------------- /assets/weekly-header/271.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/271.jpg -------------------------------------------------------------------------------- /assets/weekly-header/272.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/272.jpg -------------------------------------------------------------------------------- /assets/weekly-header/273.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/273.jpg -------------------------------------------------------------------------------- /assets/weekly-header/274.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/274.jpg -------------------------------------------------------------------------------- /assets/weekly-header/275.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/275.jpg -------------------------------------------------------------------------------- /assets/weekly-header/276.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/276.jpg -------------------------------------------------------------------------------- /assets/weekly-header/277.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/277.jpg -------------------------------------------------------------------------------- /assets/weekly-header/278.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/278.jpg -------------------------------------------------------------------------------- /assets/weekly-header/279.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/279.jpg -------------------------------------------------------------------------------- /assets/weekly-header/280.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/280.jpg -------------------------------------------------------------------------------- /assets/weekly-header/281.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/281.jpg -------------------------------------------------------------------------------- /assets/weekly-header/282.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/282.jpg -------------------------------------------------------------------------------- /assets/weekly-header/283.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/283.jpg -------------------------------------------------------------------------------- /assets/weekly-header/284.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/284.jpg -------------------------------------------------------------------------------- /assets/weekly-header/285.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/285.jpg -------------------------------------------------------------------------------- /assets/weekly-header/286.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/286.jpg -------------------------------------------------------------------------------- /assets/weekly-header/287.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/287.jpg -------------------------------------------------------------------------------- /assets/weekly-header/288.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/288.jpg -------------------------------------------------------------------------------- /assets/weekly-header/289.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/289.jpg -------------------------------------------------------------------------------- /assets/weekly-header/290.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/290.jpg -------------------------------------------------------------------------------- /assets/weekly-header/291.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/291.jpg -------------------------------------------------------------------------------- /assets/weekly-header/292.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/292.jpg -------------------------------------------------------------------------------- /assets/weekly-header/293.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/293.jpg -------------------------------------------------------------------------------- /assets/weekly-header/294.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/294.jpg -------------------------------------------------------------------------------- /assets/weekly-header/295.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/295.jpg -------------------------------------------------------------------------------- /assets/weekly-header/296.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/296.jpg -------------------------------------------------------------------------------- /assets/weekly-header/297.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/297.jpg -------------------------------------------------------------------------------- /assets/weekly-header/298.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/298.jpg -------------------------------------------------------------------------------- /assets/weekly-header/299.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/299.jpg -------------------------------------------------------------------------------- /assets/weekly-header/300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/300.jpg -------------------------------------------------------------------------------- /assets/weekly-header/301.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/301.jpg -------------------------------------------------------------------------------- /assets/weekly-header/302.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/302.jpg -------------------------------------------------------------------------------- /assets/weekly-header/303.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/303.jpg -------------------------------------------------------------------------------- /assets/weekly-header/304.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/304.jpg -------------------------------------------------------------------------------- /assets/weekly-header/305.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/305.jpg -------------------------------------------------------------------------------- /assets/weekly-header/306.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/306.jpg -------------------------------------------------------------------------------- /assets/weekly-header/307.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/307.jpg -------------------------------------------------------------------------------- /assets/weekly-header/308.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/308.jpg -------------------------------------------------------------------------------- /assets/weekly-header/309.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/309.jpg -------------------------------------------------------------------------------- /assets/weekly-header/310.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/310.jpg -------------------------------------------------------------------------------- /assets/weekly-header/311.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/311.jpg -------------------------------------------------------------------------------- /assets/weekly-header/312.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/312.jpg -------------------------------------------------------------------------------- /assets/weekly-header/313.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/313.jpg -------------------------------------------------------------------------------- /assets/weekly-header/314.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/314.jpg -------------------------------------------------------------------------------- /assets/weekly-header/315.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/315.jpg -------------------------------------------------------------------------------- /assets/weekly-header/316.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/316.jpg -------------------------------------------------------------------------------- /assets/weekly-header/317.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/317.jpg -------------------------------------------------------------------------------- /assets/weekly-header/318.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/318.jpg -------------------------------------------------------------------------------- /assets/weekly-header/319.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/319.jpg -------------------------------------------------------------------------------- /assets/weekly-header/320.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/320.jpg -------------------------------------------------------------------------------- /assets/weekly-header/321.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/321.jpg -------------------------------------------------------------------------------- /assets/weekly-header/322.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/322.jpg -------------------------------------------------------------------------------- /assets/weekly-header/323.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/323.jpg -------------------------------------------------------------------------------- /assets/weekly-header/324.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/324.jpg -------------------------------------------------------------------------------- /assets/weekly-header/325.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/325.jpg -------------------------------------------------------------------------------- /assets/weekly-header/326.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/326.jpg -------------------------------------------------------------------------------- /assets/weekly-header/327.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/327.jpg -------------------------------------------------------------------------------- /assets/weekly-header/328.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/328.jpg -------------------------------------------------------------------------------- /assets/weekly-header/329.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/329.jpg -------------------------------------------------------------------------------- /assets/weekly-header/330.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/330.jpg -------------------------------------------------------------------------------- /assets/weekly-header/331.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/331.jpg -------------------------------------------------------------------------------- /assets/weekly-header/332.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/332.jpg -------------------------------------------------------------------------------- /assets/weekly-header/333.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/333.jpg -------------------------------------------------------------------------------- /assets/weekly-header/334.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/334.jpg -------------------------------------------------------------------------------- /assets/weekly-header/335.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/335.jpg -------------------------------------------------------------------------------- /assets/weekly-header/336.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/336.jpg -------------------------------------------------------------------------------- /assets/weekly-header/337.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SwiftOldDriver/iOS-Weekly/31bd4a7de6df0182ffde1026b526149a99bb4c03/assets/weekly-header/337.jpg --------------------------------------------------------------------------------