From bb848de5812443439b580af7d42d22f3447ad05f Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 28 May 2024 23:12:26 +0100 Subject: [PATCH] Add iOS roadmap --- src/components/TopicDetail/TopicDetail.tsx | 63 +++++++++++++------ ...ibility-inspector@h34LaYQ3JYN2AZPMDqpmO.md | 1 + .../accessibility@1DZYPqvgY6GtwMCS7N2y-.md | 1 + .../alamofire@nJeBisdKtN43ntkXnPCVF.md | 1 + ...tore-distribution@iZAXQKLe2LaIIifVFtFOL.md | 1 + ...-optimization-aso@jZpH-T2hW-XBdprVqemGi.md | 1 + ...tectural-patterns@ajPGMwoaFb1UFWTtpi5kd.md | 1 + .../content/arkit@k3uHcF0CsyHr6PK95UwR1.md | 1 + ...c--await-in-swift@3GtrUXvLgvXK3G8cXRb-P.md | 1 + .../async--await@ysaBCl_TtWqelirptQp7P.md | 1 + .../auto-layout@j2BL0sf3WjnJZZWa7cCjy.md | 1 + .../av-foundation@UKgiSQvR9cryQT50t7riZ.md | 1 + .../content/azure@r3fNx1Hk_TGlQSDtRnXqF.md | 1 + .../basic-interfaces@0o3V_zveN1xCIt7rayrCF.md | 1 + ...eating-animations@w0i5Dxp40XS2HnF5nXeZI.md | 1 + ...-over-objective-c@ZkNulHQAqhiFTO3CRC_mW.md | 1 + .../breakpoints@X0QavvwPVJU6sulafPVUK.md | 1 + ...ilding-interfaces@YvuYJceeNNfLBpq2-3iiL.md | 1 + .../callback-hell@WhOpzFvv21QQV3aS6XbXr.md | 1 + .../callbacks@qJEd7KU52xL_GRG3IQqhM.md | 1 + ...lues--memory-mgmt@S-D-PnHA7COd2Dp6U2XO4.md | 1 + .../content/carthage@tIHjjNTXJWcNgkO6TB9ea.md | 1 + .../content/ci--cd@U4xE1enkZxUME0j0gutae.md | 1 + .../circle-ci@tWxuFh0xDugdplnHt_G0e.md | 1 + .../content/closures@M9UlalPL47GoqhcyGsAPV.md | 1 + .../cocoa-touch@leozxW-5fAOfkKbQM4FD1.md | 1 + .../cocoapods@epr1sOEZIAOwlgb8bre7r.md | 1 + ...ode-quality-tools@DVe8S6TjKcQ8LT5G-aMVa.md | 1 + .../combine-and-mvvm@pY_zaMcFpeFDLgVk2W0Vy.md | 1 + .../content/combine@UzpdLLPs226N00c6weWRv.md | 1 + .../components@A1TFKVjGU5RbeTF_zxJlu.md | 1 + .../components@xkH7Llut6uP2-8iTMw76F.md | 1 + ...nd-multithreading@fbloF-u4XwdHLmBS9flZm.md | 1 + ...cy-gcd-asyncawait@aALIiAxKz4f7B_EYyhBCi.md | 1 + .../concurrency@-aLGB3cDXZHIhVU3t-Ve4.md | 1 + .../core-animation@KpcmuLWX0xAjz6ty4ebtB.md | 1 + .../core-animation@_mRs6ctH0IsSSi-cwV2b8.md | 1 + .../core-audio@4bAABCfTvxchS5C5NlAro.md | 1 + .../core-data@H4-Dp2WTA6HAZiFRQdLjx.md | 1 + .../core-graphics@kRE9xT3mT9Si4NwJr9yGi.md | 1 + .../core-image@6zE_M0_oVpwW0B9qFSRgP.md | 1 + .../content/core-ml@7s9Elv80TbZX_-NZpyutj.md | 1 + .../content/core-os@IdGdLNgJI3WmONEFsMq-d.md | 1 + ...gramming-concepts@mk02yV7_XHkgp2xdNIxaU.md | 1 + .../core-services@LHM7gNgTtfn_QDW-oQskD.md | 1 + .../data-binding@yR94uHs0SiSScU4gPBzfr.md | 1 + .../data-persistence@6gfqFy3H6SLt06oJ1kt5A.md | 1 + .../debug-navigator@VuWUsg05WmOoP_RJ5AXJO.md | 1 + ...ugging-techniques@OZZ3UnWN2gFflbM_WaJ8H.md | 1 + ...eclarative-syntax@QVg4_8EXeQBJbleryy8c1.md | 1 + .../delegate-pattern@BtPYKd7RedHOLRATDKkpg.md | 1 + ...ependency-manager@Tv8-WUcKiZMLHuunQwise.md | 1 + .../dynamic-library@Lrb4HZYrZU7SJlbedZp7U.md | 1 + .../dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md | 1 + .../content/editors@-4q7MFXaTmpR_39PTeWD8.md | 1 + .../error-handling@N5ojp6bqgH074MPKYjCHV.md | 1 + .../content/fastlane@_W3vb0b14FrWB2fH7DHC7.md | 1 + .../file-system@_bkRbqVXKNCnRvEFCM6mN.md | 1 + ...ameworks--library@pZVPsgvCpP3zUgBM4i0CF.md | 1 + .../frameworks@PdzCQXZIivw3zCYPtokJV.md | 1 + ...ional-programming@Pj-hqRZUmwx1WhmTbLoFD.md | 1 + .../content/gamekit@H5F9P5xeQiHhWhS6jEzp5.md | 1 + .../ios/content/gcd@aROcI1RucAyu-gHn-tVnj.md | 1 + .../ios/content/git@QifWR7WSJJTcTK2IfczxG.md | 1 + .../github-actions@LltERZaHsI-R_3O_3twpk.md | 1 + .../content/github@U_xXGSFF5iibQ4VkzPAWf.md | 1 + .../content/gitlab@VylaBSDAVFzveVfytI1Fz.md | 1 + .../content/graphql@9o7d3aN0YFfNNUeVoJrhs.md | 1 + .../content/groups@42sfiLKrVCcnMMjR7TFn1.md | 1 + .../healthkit@Jsu5f6QASpuvpky_W5q-O.md | 1 + .../ios/content/hig@1I5eFKqFVBxWLAXfpgNXO.md | 1 + ...ory-and-why-swift@z4-1Gc95JKYAn2RPFc7hw.md | 1 + .../http--https@GjY5qCU1rjB0D58qHQtAR.md | 1 + .../ibactions@FspN4yiBF9aEN7_SlXUe1.md | 1 + .../iboutlets@tuUuLInq0p-nhehe2AqPg.md | 1 + ...menting-delegates@z3AUN9u7EEqeKOqvLxf7D.md | 1 + .../installing@R8LdFpfyS0MFYJuMLk8RG.md | 1 + ...interface-builder@iMzYd8KUFnk6zqr4KecgX.md | 1 + ...nterface-overview@FwwqAchMC6qdnXbqg45he.md | 1 + ...bility-with-swift@IAPzuN51xvrZJ5TFB23Q9.md | 1 + .../ios-architecture@IduGSdUa2Fi7VFMLKgmsS.md | 1 + .../content/jenkins@TrblGyy81Oep2CBxoZkaf.md | 1 + .../json--xml@WYV4YG_sLvC4S5ptFFdrF.md | 1 + ...updated-with-wwdc@fOOQurIL1w3PwH5Mep9x1.md | 1 + .../content/keychain@8v_eP0j85TnB33XyYAzrT.md | 1 + .../latest-ios-sdk@SBlLNfyWzzhdFNtNtkLet.md | 1 + ...est-swift-version@e7qVpQeu2iQL0c9MOMCVe.md | 1 + .../content/lottie@i-T6GTqS0FZ_Llt5v4SvR.md | 1 + .../content/mapkit@XOXsjaQ-YyuAMpVCqH8KG.md | 1 + .../content/media@nGCG74_Xp_Ngt0u7PZnZl.md | 1 + ...memory-management@tqbg8mBJfjuXacdMlIB_L.md | 1 + .../ios/content/meta@5VguZoP4h40rTWkxWxaxU.md | 1 + ...ls-and-navigation@jb89kQxDhZND3vQo0EH7r.md | 1 + .../ios/content/mvc@a-QDI7Ei-B5BRHbicFcfG.md | 1 + .../ios/content/mvp@lVNrnUK6p4eifKRVSnOje.md | 1 + .../content/mvvm-c@iLT2jAkQg-Ex0zSLquNfl.md | 1 + .../ios/content/mvvm@taTxZw2c3xS18JOwgkNHM.md | 1 + ...ontrollers-segues@tUbMr1pGlw4JwMuW311JJ.md | 1 + ...navigation-stacks@TLm70PlTI0K3Odn1iYxWX.md | 1 + ...navigation-stacks@mUMDZsgzCB6cs_K6pfUY1.md | 1 + .../navigation-view@IBr2P7dknWTnZ2a-fFCqN.md | 1 + .../navigation@02VAK4GMkN6nDHf1zqwPA.md | 1 + .../navigation@FXUrfyvuIIOH7VDnT_E0z.md | 1 + .../navigationlink@my77jLU2qxU7bQ7_Fx2iH.md | 1 + .../navigators@odKZx4SUULF1y4gmiJZdu.md | 1 + .../networking@JoNoM-utp8MaL1H0oXDta.md | 1 + ...ure-announcements@0dbdUmWvTIJ0fkUuLp9gR.md | 1 + .../new-project@BJgoAgH85U6S3RtXq7hHV.md | 1 + ...bjective-c-basics@0BSX80W1TJ_Ia_Zh2zKyK.md | 1 + .../objective-c@oOaMz9A5DZvrjxovMztXz.md | 1 + ...vables--observers@k232wKg7XCb_ngjZ5Mwsy.md | 1 + .../ios/content/oop@FoqlB7xBIrV4yUp4ReBkw.md | 1 + .../operation-queues@mdAV4JlF08q-ZQpb5C3q6.md | 1 + ...rators--pipelines@GAn12SsVR_mPxOaOVckdz.md | 1 + .../operators@t7IYTY8tVjC_xzM1n8wts.md | 1 + .../content/parsing@UTVh1RHRWb5eA-S7ayLp8.md | 1 + .../pick-a-language@MrdIb9F-wSEbUz7KRnH3t.md | 1 + .../preferences@SeGfULWFR7ufdv4U9Db3F.md | 1 + ...-dismissing-views@4pmjLa7WvwV7D3RZlM6Hp.md | 1 + ...iling-instruments@Y24WWPej0C7-FiBeXpvl3.md | 1 + .../project-files@YytdlQl41yrHSwlV-G3Pd.md | 1 + ...hers--subscribers@noBaDV_PvCTzqPyw9eO4H.md | 1 + ...ushing-presenting@gqd6zjxP_qFj4Ru-6LARo.md | 1 + ...ctive-programming@28HMXXBJWd3n-ZPgeQRDa.md | 1 + .../ios/content/rest@3Qw-qmy5iAE61mPbIY4Q2.md | 1 + ...rxswift-with-mvvm@g_1f5a6tIB5V_36NjgtL5.md | 1 + .../content/rxswift@0xwoWj9jek36p1AwU3WkK.md | 1 + .../schedulers@UqA01PT86_w_JzN6KZBku.md | 1 + .../serializing@8rYjSCgRiJMHTNxOU6vgG.md | 1 + .../content/sqlite@3qjQbrCUchJn1bJTBWrQF.md | 1 + .../state-management@RvyOkQelc-GChQGJyEx72.md | 1 + .../static-library@RuXuHQhMt2nywk43LgGeJ.md | 1 + .../content/stepping@hUHxlNa6iJJbDGdFNhynB.md | 1 + .../storyboards@a2CqrCJSxGfHq6_Y9f_re.md | 1 + .../content/subjects@1xYZdnlI6JSJzNvmz4-0v.md | 1 + .../swift-basics@fboebSmquyJyozsMRJDtK.md | 1 + ...t-package-manager@KFkX8_Hv9SCFeCtZMZIQM.md | 1 + ...swift-recommended@KJ7fM-V0_azY_lzmhjJAN.md | 1 + .../content/swift-ui@PvFp6aY7EUrYHn87RZAGj.md | 1 + .../content/swift-ui@kAIKsDcDzwI1E0wSnC_uo.md | 1 + .../swiftformat@TMFvfwG45Z00PzrzZIVhT.md | 1 + .../swiftlint@NnTC3R8goZQTXHmfHKHbM.md | 1 + .../content/tailor@F5796wzm5Ar6sQt-1y8vH.md | 1 + .../ios/content/tca@NhC0SBZgUFGjMLNICvbTI.md | 1 + ...st-plan--coverage@uczkyc30K_qqcarZCGTdF.md | 1 + .../testflight@KCJgCjMJGxIcf13XSEclO.md | 1 + .../content/toolbar@AxQ5gCjk136kXsbBFTUNp.md | 1 + .../ui-design@4fPgpGwNXmVoZoruBRb_B.md | 1 + .../content/ui-kit@-7OW2IgiMk1eot1PaYd7m.md | 1 + .../content/ui-kit@pNEE5C1E1wAjH_nTlzH6N.md | 1 + ...nd-using-closures@5V7nxQKmmHWSMSBCRxkaF.md | 1 + .../unit--ui-testing@5589B1DKaCd-9l9DfKH3o.md | 1 + .../urlsession@WPJACNeI6jX9GGB1roeTp.md | 1 + .../user-defaults@ImS1FqVicQImMw-y1ze7y.md | 1 + ...user-interactions@GKuxilB0AwjcTgCSk3FeU.md | 1 + .../version-control@sGnDm2xuJxqfU3pwmlY7H.md | 1 + .../view-controllers@mfWdkUm1RhjygtMyInXiD.md | 1 + .../view-transitions@2tmR1yE5daz2HB4IV5qwI.md | 1 + .../view-transitions@cwVcNDTBBulBY2m4Wzn4G.md | 1 + ...troller-lifecycle@DZaY060-5D6PbfryOZH9H.md | 1 + ...ews-and-modifiers@mgUCYztUpKINqIZikT4Bh.md | 1 + ...-view-controllers@XX5rCd_yTHvOfYif4Kpbl.md | 1 + .../content/views@se9w7mT1XJLGlmWUhH4Uv.md | 1 + .../content/viper@mTdnDPGYSDupM9VBNdXRg.md | 1 + .../voice-over@trAMZVA4tDB7b_qAgiWNW.md | 1 + .../xcframework@MaHtZSIPxDzrnB33_9OdV.md | 1 + .../xcode-debugger@WxshXCloVDkVkQV0JvI1w.md | 1 + .../content/xcode@la5M4VoH79bhnN8qj5Izp.md | 1 + .../content/xctest@xZmBJVq5FHNdm1BDuZbbS.md | 1 + .../content/xcuitest@ZQSUKPbXZl5yKra2ap8JR.md | 1 + .../ios/content/xibs@RwvC4Pi18_1phcrJL-9iu.md | 1 + src/data/roadmaps/ios/faqs.astro | 0 src/data/roadmaps/ios/ios.json | 1 + src/data/roadmaps/ios/ios.md | 45 +++++++++++++ src/data/roadmaps/sql/sql.md | 2 +- 175 files changed, 262 insertions(+), 19 deletions(-) create mode 100644 src/data/roadmaps/ios/content/accessibility-inspector@h34LaYQ3JYN2AZPMDqpmO.md create mode 100644 src/data/roadmaps/ios/content/accessibility@1DZYPqvgY6GtwMCS7N2y-.md create mode 100644 src/data/roadmaps/ios/content/alamofire@nJeBisdKtN43ntkXnPCVF.md create mode 100644 src/data/roadmaps/ios/content/app-store-distribution@iZAXQKLe2LaIIifVFtFOL.md create mode 100644 src/data/roadmaps/ios/content/app-store-optimization-aso@jZpH-T2hW-XBdprVqemGi.md create mode 100644 src/data/roadmaps/ios/content/architectural-patterns@ajPGMwoaFb1UFWTtpi5kd.md create mode 100644 src/data/roadmaps/ios/content/arkit@k3uHcF0CsyHr6PK95UwR1.md create mode 100644 src/data/roadmaps/ios/content/async--await-in-swift@3GtrUXvLgvXK3G8cXRb-P.md create mode 100644 src/data/roadmaps/ios/content/async--await@ysaBCl_TtWqelirptQp7P.md create mode 100644 src/data/roadmaps/ios/content/auto-layout@j2BL0sf3WjnJZZWa7cCjy.md create mode 100644 src/data/roadmaps/ios/content/av-foundation@UKgiSQvR9cryQT50t7riZ.md create mode 100644 src/data/roadmaps/ios/content/azure@r3fNx1Hk_TGlQSDtRnXqF.md create mode 100644 src/data/roadmaps/ios/content/basic-interfaces@0o3V_zveN1xCIt7rayrCF.md create mode 100644 src/data/roadmaps/ios/content/basics--creating-animations@w0i5Dxp40XS2HnF5nXeZI.md create mode 100644 src/data/roadmaps/ios/content/benefits-over-objective-c@ZkNulHQAqhiFTO3CRC_mW.md create mode 100644 src/data/roadmaps/ios/content/breakpoints@X0QavvwPVJU6sulafPVUK.md create mode 100644 src/data/roadmaps/ios/content/building-interfaces@YvuYJceeNNfLBpq2-3iiL.md create mode 100644 src/data/roadmaps/ios/content/callback-hell@WhOpzFvv21QQV3aS6XbXr.md create mode 100644 src/data/roadmaps/ios/content/callbacks@qJEd7KU52xL_GRG3IQqhM.md create mode 100644 src/data/roadmaps/ios/content/capturing-values--memory-mgmt@S-D-PnHA7COd2Dp6U2XO4.md create mode 100644 src/data/roadmaps/ios/content/carthage@tIHjjNTXJWcNgkO6TB9ea.md create mode 100644 src/data/roadmaps/ios/content/ci--cd@U4xE1enkZxUME0j0gutae.md create mode 100644 src/data/roadmaps/ios/content/circle-ci@tWxuFh0xDugdplnHt_G0e.md create mode 100644 src/data/roadmaps/ios/content/closures@M9UlalPL47GoqhcyGsAPV.md create mode 100644 src/data/roadmaps/ios/content/cocoa-touch@leozxW-5fAOfkKbQM4FD1.md create mode 100644 src/data/roadmaps/ios/content/cocoapods@epr1sOEZIAOwlgb8bre7r.md create mode 100644 src/data/roadmaps/ios/content/code-quality-tools@DVe8S6TjKcQ8LT5G-aMVa.md create mode 100644 src/data/roadmaps/ios/content/combine-and-mvvm@pY_zaMcFpeFDLgVk2W0Vy.md create mode 100644 src/data/roadmaps/ios/content/combine@UzpdLLPs226N00c6weWRv.md create mode 100644 src/data/roadmaps/ios/content/components@A1TFKVjGU5RbeTF_zxJlu.md create mode 100644 src/data/roadmaps/ios/content/components@xkH7Llut6uP2-8iTMw76F.md create mode 100644 src/data/roadmaps/ios/content/concurrency-and-multithreading@fbloF-u4XwdHLmBS9flZm.md create mode 100644 src/data/roadmaps/ios/content/concurrency-gcd-asyncawait@aALIiAxKz4f7B_EYyhBCi.md create mode 100644 src/data/roadmaps/ios/content/concurrency@-aLGB3cDXZHIhVU3t-Ve4.md create mode 100644 src/data/roadmaps/ios/content/core-animation@KpcmuLWX0xAjz6ty4ebtB.md create mode 100644 src/data/roadmaps/ios/content/core-animation@_mRs6ctH0IsSSi-cwV2b8.md create mode 100644 src/data/roadmaps/ios/content/core-audio@4bAABCfTvxchS5C5NlAro.md create mode 100644 src/data/roadmaps/ios/content/core-data@H4-Dp2WTA6HAZiFRQdLjx.md create mode 100644 src/data/roadmaps/ios/content/core-graphics@kRE9xT3mT9Si4NwJr9yGi.md create mode 100644 src/data/roadmaps/ios/content/core-image@6zE_M0_oVpwW0B9qFSRgP.md create mode 100644 src/data/roadmaps/ios/content/core-ml@7s9Elv80TbZX_-NZpyutj.md create mode 100644 src/data/roadmaps/ios/content/core-os@IdGdLNgJI3WmONEFsMq-d.md create mode 100644 src/data/roadmaps/ios/content/core-programming-concepts@mk02yV7_XHkgp2xdNIxaU.md create mode 100644 src/data/roadmaps/ios/content/core-services@LHM7gNgTtfn_QDW-oQskD.md create mode 100644 src/data/roadmaps/ios/content/data-binding@yR94uHs0SiSScU4gPBzfr.md create mode 100644 src/data/roadmaps/ios/content/data-persistence@6gfqFy3H6SLt06oJ1kt5A.md create mode 100644 src/data/roadmaps/ios/content/debug-navigator@VuWUsg05WmOoP_RJ5AXJO.md create mode 100644 src/data/roadmaps/ios/content/debugging-techniques@OZZ3UnWN2gFflbM_WaJ8H.md create mode 100644 src/data/roadmaps/ios/content/declarative-syntax@QVg4_8EXeQBJbleryy8c1.md create mode 100644 src/data/roadmaps/ios/content/delegate-pattern@BtPYKd7RedHOLRATDKkpg.md create mode 100644 src/data/roadmaps/ios/content/dependency-manager@Tv8-WUcKiZMLHuunQwise.md create mode 100644 src/data/roadmaps/ios/content/dynamic-library@Lrb4HZYrZU7SJlbedZp7U.md create mode 100644 src/data/roadmaps/ios/content/dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md create mode 100644 src/data/roadmaps/ios/content/editors@-4q7MFXaTmpR_39PTeWD8.md create mode 100644 src/data/roadmaps/ios/content/error-handling@N5ojp6bqgH074MPKYjCHV.md create mode 100644 src/data/roadmaps/ios/content/fastlane@_W3vb0b14FrWB2fH7DHC7.md create mode 100644 src/data/roadmaps/ios/content/file-system@_bkRbqVXKNCnRvEFCM6mN.md create mode 100644 src/data/roadmaps/ios/content/frameworks--library@pZVPsgvCpP3zUgBM4i0CF.md create mode 100644 src/data/roadmaps/ios/content/frameworks@PdzCQXZIivw3zCYPtokJV.md create mode 100644 src/data/roadmaps/ios/content/functional-programming@Pj-hqRZUmwx1WhmTbLoFD.md create mode 100644 src/data/roadmaps/ios/content/gamekit@H5F9P5xeQiHhWhS6jEzp5.md create mode 100644 src/data/roadmaps/ios/content/gcd@aROcI1RucAyu-gHn-tVnj.md create mode 100644 src/data/roadmaps/ios/content/git@QifWR7WSJJTcTK2IfczxG.md create mode 100644 src/data/roadmaps/ios/content/github-actions@LltERZaHsI-R_3O_3twpk.md create mode 100644 src/data/roadmaps/ios/content/github@U_xXGSFF5iibQ4VkzPAWf.md create mode 100644 src/data/roadmaps/ios/content/gitlab@VylaBSDAVFzveVfytI1Fz.md create mode 100644 src/data/roadmaps/ios/content/graphql@9o7d3aN0YFfNNUeVoJrhs.md create mode 100644 src/data/roadmaps/ios/content/groups@42sfiLKrVCcnMMjR7TFn1.md create mode 100644 src/data/roadmaps/ios/content/healthkit@Jsu5f6QASpuvpky_W5q-O.md create mode 100644 src/data/roadmaps/ios/content/hig@1I5eFKqFVBxWLAXfpgNXO.md create mode 100644 src/data/roadmaps/ios/content/history-and-why-swift@z4-1Gc95JKYAn2RPFc7hw.md create mode 100644 src/data/roadmaps/ios/content/http--https@GjY5qCU1rjB0D58qHQtAR.md create mode 100644 src/data/roadmaps/ios/content/ibactions@FspN4yiBF9aEN7_SlXUe1.md create mode 100644 src/data/roadmaps/ios/content/iboutlets@tuUuLInq0p-nhehe2AqPg.md create mode 100644 src/data/roadmaps/ios/content/implementing-delegates@z3AUN9u7EEqeKOqvLxf7D.md create mode 100644 src/data/roadmaps/ios/content/installing@R8LdFpfyS0MFYJuMLk8RG.md create mode 100644 src/data/roadmaps/ios/content/interface-builder@iMzYd8KUFnk6zqr4KecgX.md create mode 100644 src/data/roadmaps/ios/content/interface-overview@FwwqAchMC6qdnXbqg45he.md create mode 100644 src/data/roadmaps/ios/content/interoperability-with-swift@IAPzuN51xvrZJ5TFB23Q9.md create mode 100644 src/data/roadmaps/ios/content/ios-architecture@IduGSdUa2Fi7VFMLKgmsS.md create mode 100644 src/data/roadmaps/ios/content/jenkins@TrblGyy81Oep2CBxoZkaf.md create mode 100644 src/data/roadmaps/ios/content/json--xml@WYV4YG_sLvC4S5ptFFdrF.md create mode 100644 src/data/roadmaps/ios/content/keeping-updated-with-wwdc@fOOQurIL1w3PwH5Mep9x1.md create mode 100644 src/data/roadmaps/ios/content/keychain@8v_eP0j85TnB33XyYAzrT.md create mode 100644 src/data/roadmaps/ios/content/latest-ios-sdk@SBlLNfyWzzhdFNtNtkLet.md create mode 100644 src/data/roadmaps/ios/content/latest-swift-version@e7qVpQeu2iQL0c9MOMCVe.md create mode 100644 src/data/roadmaps/ios/content/lottie@i-T6GTqS0FZ_Llt5v4SvR.md create mode 100644 src/data/roadmaps/ios/content/mapkit@XOXsjaQ-YyuAMpVCqH8KG.md create mode 100644 src/data/roadmaps/ios/content/media@nGCG74_Xp_Ngt0u7PZnZl.md create mode 100644 src/data/roadmaps/ios/content/memory-management@tqbg8mBJfjuXacdMlIB_L.md create mode 100644 src/data/roadmaps/ios/content/meta@5VguZoP4h40rTWkxWxaxU.md create mode 100644 src/data/roadmaps/ios/content/modals-and-navigation@jb89kQxDhZND3vQo0EH7r.md create mode 100644 src/data/roadmaps/ios/content/mvc@a-QDI7Ei-B5BRHbicFcfG.md create mode 100644 src/data/roadmaps/ios/content/mvp@lVNrnUK6p4eifKRVSnOje.md create mode 100644 src/data/roadmaps/ios/content/mvvm-c@iLT2jAkQg-Ex0zSLquNfl.md create mode 100644 src/data/roadmaps/ios/content/mvvm@taTxZw2c3xS18JOwgkNHM.md create mode 100644 src/data/roadmaps/ios/content/navigation-controllers-segues@tUbMr1pGlw4JwMuW311JJ.md create mode 100644 src/data/roadmaps/ios/content/navigation-stacks@TLm70PlTI0K3Odn1iYxWX.md create mode 100644 src/data/roadmaps/ios/content/navigation-stacks@mUMDZsgzCB6cs_K6pfUY1.md create mode 100644 src/data/roadmaps/ios/content/navigation-view@IBr2P7dknWTnZ2a-fFCqN.md create mode 100644 src/data/roadmaps/ios/content/navigation@02VAK4GMkN6nDHf1zqwPA.md create mode 100644 src/data/roadmaps/ios/content/navigation@FXUrfyvuIIOH7VDnT_E0z.md create mode 100644 src/data/roadmaps/ios/content/navigationlink@my77jLU2qxU7bQ7_Fx2iH.md create mode 100644 src/data/roadmaps/ios/content/navigators@odKZx4SUULF1y4gmiJZdu.md create mode 100644 src/data/roadmaps/ios/content/networking@JoNoM-utp8MaL1H0oXDta.md create mode 100644 src/data/roadmaps/ios/content/new-feature-announcements@0dbdUmWvTIJ0fkUuLp9gR.md create mode 100644 src/data/roadmaps/ios/content/new-project@BJgoAgH85U6S3RtXq7hHV.md create mode 100644 src/data/roadmaps/ios/content/objective-c-basics@0BSX80W1TJ_Ia_Zh2zKyK.md create mode 100644 src/data/roadmaps/ios/content/objective-c@oOaMz9A5DZvrjxovMztXz.md create mode 100644 src/data/roadmaps/ios/content/observables--observers@k232wKg7XCb_ngjZ5Mwsy.md create mode 100644 src/data/roadmaps/ios/content/oop@FoqlB7xBIrV4yUp4ReBkw.md create mode 100644 src/data/roadmaps/ios/content/operation-queues@mdAV4JlF08q-ZQpb5C3q6.md create mode 100644 src/data/roadmaps/ios/content/operators--pipelines@GAn12SsVR_mPxOaOVckdz.md create mode 100644 src/data/roadmaps/ios/content/operators@t7IYTY8tVjC_xzM1n8wts.md create mode 100644 src/data/roadmaps/ios/content/parsing@UTVh1RHRWb5eA-S7ayLp8.md create mode 100644 src/data/roadmaps/ios/content/pick-a-language@MrdIb9F-wSEbUz7KRnH3t.md create mode 100644 src/data/roadmaps/ios/content/preferences@SeGfULWFR7ufdv4U9Db3F.md create mode 100644 src/data/roadmaps/ios/content/presenting--dismissing-views@4pmjLa7WvwV7D3RZlM6Hp.md create mode 100644 src/data/roadmaps/ios/content/profiling-instruments@Y24WWPej0C7-FiBeXpvl3.md create mode 100644 src/data/roadmaps/ios/content/project-files@YytdlQl41yrHSwlV-G3Pd.md create mode 100644 src/data/roadmaps/ios/content/publishers--subscribers@noBaDV_PvCTzqPyw9eO4H.md create mode 100644 src/data/roadmaps/ios/content/pushing-presenting@gqd6zjxP_qFj4Ru-6LARo.md create mode 100644 src/data/roadmaps/ios/content/reactive-programming@28HMXXBJWd3n-ZPgeQRDa.md create mode 100644 src/data/roadmaps/ios/content/rest@3Qw-qmy5iAE61mPbIY4Q2.md create mode 100644 src/data/roadmaps/ios/content/rxswift-with-mvvm@g_1f5a6tIB5V_36NjgtL5.md create mode 100644 src/data/roadmaps/ios/content/rxswift@0xwoWj9jek36p1AwU3WkK.md create mode 100644 src/data/roadmaps/ios/content/schedulers@UqA01PT86_w_JzN6KZBku.md create mode 100644 src/data/roadmaps/ios/content/serializing@8rYjSCgRiJMHTNxOU6vgG.md create mode 100644 src/data/roadmaps/ios/content/sqlite@3qjQbrCUchJn1bJTBWrQF.md create mode 100644 src/data/roadmaps/ios/content/state-management@RvyOkQelc-GChQGJyEx72.md create mode 100644 src/data/roadmaps/ios/content/static-library@RuXuHQhMt2nywk43LgGeJ.md create mode 100644 src/data/roadmaps/ios/content/stepping@hUHxlNa6iJJbDGdFNhynB.md create mode 100644 src/data/roadmaps/ios/content/storyboards@a2CqrCJSxGfHq6_Y9f_re.md create mode 100644 src/data/roadmaps/ios/content/subjects@1xYZdnlI6JSJzNvmz4-0v.md create mode 100644 src/data/roadmaps/ios/content/swift-basics@fboebSmquyJyozsMRJDtK.md create mode 100644 src/data/roadmaps/ios/content/swift-package-manager@KFkX8_Hv9SCFeCtZMZIQM.md create mode 100644 src/data/roadmaps/ios/content/swift-recommended@KJ7fM-V0_azY_lzmhjJAN.md create mode 100644 src/data/roadmaps/ios/content/swift-ui@PvFp6aY7EUrYHn87RZAGj.md create mode 100644 src/data/roadmaps/ios/content/swift-ui@kAIKsDcDzwI1E0wSnC_uo.md create mode 100644 src/data/roadmaps/ios/content/swiftformat@TMFvfwG45Z00PzrzZIVhT.md create mode 100644 src/data/roadmaps/ios/content/swiftlint@NnTC3R8goZQTXHmfHKHbM.md create mode 100644 src/data/roadmaps/ios/content/tailor@F5796wzm5Ar6sQt-1y8vH.md create mode 100644 src/data/roadmaps/ios/content/tca@NhC0SBZgUFGjMLNICvbTI.md create mode 100644 src/data/roadmaps/ios/content/test-plan--coverage@uczkyc30K_qqcarZCGTdF.md create mode 100644 src/data/roadmaps/ios/content/testflight@KCJgCjMJGxIcf13XSEclO.md create mode 100644 src/data/roadmaps/ios/content/toolbar@AxQ5gCjk136kXsbBFTUNp.md create mode 100644 src/data/roadmaps/ios/content/ui-design@4fPgpGwNXmVoZoruBRb_B.md create mode 100644 src/data/roadmaps/ios/content/ui-kit@-7OW2IgiMk1eot1PaYd7m.md create mode 100644 src/data/roadmaps/ios/content/ui-kit@pNEE5C1E1wAjH_nTlzH6N.md create mode 100644 src/data/roadmaps/ios/content/understanding-and-using-closures@5V7nxQKmmHWSMSBCRxkaF.md create mode 100644 src/data/roadmaps/ios/content/unit--ui-testing@5589B1DKaCd-9l9DfKH3o.md create mode 100644 src/data/roadmaps/ios/content/urlsession@WPJACNeI6jX9GGB1roeTp.md create mode 100644 src/data/roadmaps/ios/content/user-defaults@ImS1FqVicQImMw-y1ze7y.md create mode 100644 src/data/roadmaps/ios/content/user-interactions@GKuxilB0AwjcTgCSk3FeU.md create mode 100644 src/data/roadmaps/ios/content/version-control@sGnDm2xuJxqfU3pwmlY7H.md create mode 100644 src/data/roadmaps/ios/content/view-controllers@mfWdkUm1RhjygtMyInXiD.md create mode 100644 src/data/roadmaps/ios/content/view-transitions@2tmR1yE5daz2HB4IV5qwI.md create mode 100644 src/data/roadmaps/ios/content/view-transitions@cwVcNDTBBulBY2m4Wzn4G.md create mode 100644 src/data/roadmaps/ios/content/viewcontroller-lifecycle@DZaY060-5D6PbfryOZH9H.md create mode 100644 src/data/roadmaps/ios/content/views-and-modifiers@mgUCYztUpKINqIZikT4Bh.md create mode 100644 src/data/roadmaps/ios/content/views-view-controllers@XX5rCd_yTHvOfYif4Kpbl.md create mode 100644 src/data/roadmaps/ios/content/views@se9w7mT1XJLGlmWUhH4Uv.md create mode 100644 src/data/roadmaps/ios/content/viper@mTdnDPGYSDupM9VBNdXRg.md create mode 100644 src/data/roadmaps/ios/content/voice-over@trAMZVA4tDB7b_qAgiWNW.md create mode 100644 src/data/roadmaps/ios/content/xcframework@MaHtZSIPxDzrnB33_9OdV.md create mode 100644 src/data/roadmaps/ios/content/xcode-debugger@WxshXCloVDkVkQV0JvI1w.md create mode 100644 src/data/roadmaps/ios/content/xcode@la5M4VoH79bhnN8qj5Izp.md create mode 100644 src/data/roadmaps/ios/content/xctest@xZmBJVq5FHNdm1BDuZbbS.md create mode 100644 src/data/roadmaps/ios/content/xcuitest@ZQSUKPbXZl5yKra2ap8JR.md create mode 100644 src/data/roadmaps/ios/content/xibs@RwvC4Pi18_1phcrJL-9iu.md create mode 100644 src/data/roadmaps/ios/faqs.astro create mode 100644 src/data/roadmaps/ios/ios.json create mode 100644 src/data/roadmaps/ios/ios.md diff --git a/src/components/TopicDetail/TopicDetail.tsx b/src/components/TopicDetail/TopicDetail.tsx index ca28800a4..b3ca77289 100644 --- a/src/components/TopicDetail/TopicDetail.tsx +++ b/src/components/TopicDetail/TopicDetail.tsx @@ -23,7 +23,7 @@ import type { } from '../CustomRoadmap/CustomRoadmap'; import { markdownToHtml, sanitizeMarkdown } from '../../lib/markdown'; import { cn } from '../../lib/classname'; -import { Ban, FileText, X } from 'lucide-react'; +import { Ban, FileText, HeartHandshake, X } from 'lucide-react'; import { getUrlParams } from '../../lib/browser'; import { Spinner } from '../ReactIcons/Spinner'; import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx'; @@ -58,6 +58,7 @@ export function TopicDetail(props: TopicDetailProps) { const [isContributing, setIsContributing] = useState(false); const [error, setError] = useState(''); const [topicHtml, setTopicHtml] = useState(''); + const [hasContent, setHasContent] = useState(false); const [topicTitle, setTopicTitle] = useState(''); const [topicHtmlTitle, setTopicHtmlTitle] = useState(''); const [links, setLinks] = useState([]); @@ -177,6 +178,9 @@ export function TopicDetail(props: TopicDetailProps) { const titleElem: HTMLElement = topicDom.querySelector('h1')!; + const otherElems = topicDom.querySelectorAll('body > *:not(h1, div)'); + + setHasContent(otherElems.length > 0); setContributionUrl(contributionUrl); setHasEnoughLinks(links.length >= 3); setTopicHtmlTitle(titleElem?.textContent || ''); @@ -207,7 +211,6 @@ export function TopicDetail(props: TopicDetailProps) { return null; } - const hasContent = topicHtml?.length > 0 || links?.length > 0 || topicTitle; const resourceTitleForSearch = resourceTitle ?.toLowerCase() ?.replace(/\s+?roadmap/gi, ''); @@ -225,7 +228,7 @@ export function TopicDetail(props: TopicDetailProps) { className="fixed right-0 top-0 z-40 flex h-screen w-full flex-col overflow-y-auto bg-white p-4 focus:outline-0 sm:max-w-[600px] sm:p-6" > {isLoading && ( -
+
- {topicTitle &&

{topicTitle}

} -
-
+ <> +
+ {topicTitle &&

{topicTitle}

} +
+
+ ) : ( -
- -

- Empty Content -

-
+ <> + {!canSubmitContribution && ( +
+ +

+ Empty Content +

+
+ )} + {canSubmitContribution && ( +
+ +

+ Help us write this content +

+

+ Write a brief introduction to this topic and submit a link to a good article, podcast, video, or any other self-vetted resource that helped you understand this topic better. +

+ + + Submit a Pull Request + +
+ )} + )} {links.length > 0 && ( @@ -313,8 +341,7 @@ export function TopicDetail(props: TopicDetailProps) {

- Can't find what you're looking for? Try these pre-filled - search queries: + Find more resources using these pre-filled search queries: