[{"data":1,"prerenderedAt":318},["ShallowReactive",2],{"dev-logs":3},[4,47,194,211,236,274],{"title":5,"description":6,"date":7,"kind":8,"links":9,"body":14,"id":44,"index":45,"path":46},"xtool is Awesome!","xtool is a tool that attempts to replace Xcode by using Swift Package Manager to build and deploy iOS apps on macOS, Linux, and Windows! I have been working closely with the developer to support for App Extensions and also resolve additional issues.",["Date","2025-07-20T00:00:00.000Z"],"blog",[10],{"label":11,"href":12,"role":13},"xtool on GitHub","https:\u002F\u002Fgithub.com\u002Fxtool-org\u002Fxtool","primary",{"type":15,"children":16},"root",[17,25,39],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"xtool-is-awesome",[23],{"type":24,"value":5},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29,37],{"type":18,"tag":30,"props":31,"children":34},"a",{"href":12,"rel":32},[33],"nofollow",[35],{"type":24,"value":36},"xtool",{"type":24,"value":38}," is a tool that attempts to replace Xcode by using Swift Package Manager to build and deploy iOS apps on macOS, Linux, and Windows! I have been working closely with the developer to support for App Extensions and also resolve additional issues.",{"type":18,"tag":26,"props":40,"children":41},{},[42],{"type":24,"value":43},"I hope to also replace \"AppleProductTypes\", a library used to build iOS and macOS apps using Swift Playgrounds, in favor of \"XToolProductTypes.\"","logs-5",5,"..\u002F..\u002Fposts\u002Fxtool-is-awesome.md",{"title":48,"description":49,"date":50,"kind":8,"header":51,"links":55,"body":63,"id":192,"index":148,"path":193},"Website Redesign","",["Date","2025-02-02T00:00:00.000Z"],{"type":52,"lang":53,"value":54},"code","swift","struct Portfolio: HTML {\n  var body: some HTML {\n    HomePage()\n  }\n}\n",[56,59],{"label":57,"href":58,"role":13},"Portfolio on GitHub","https:\u002F\u002Fgithub.com\u002Ferikbdev\u002Ferikbautista.dev",{"label":60,"href":61,"role":62},"swift-web on GitHub","https:\u002F\u002Fgithub.com\u002Ferikbdev\u002Fswift-web","secondary",{"type":15,"children":64},[65,163,168,181,186],{"type":18,"tag":66,"props":67,"children":69},"pre",{"className":68,"code":54,"language":53,"meta":49,"style":49},"language-swift shiki shiki-themes github-dark",[70],{"type":18,"tag":52,"props":71,"children":72},{"__ignoreMap":49},[73,107,131,146,155],{"type":18,"tag":74,"props":75,"children":78},"span",{"class":76,"line":77},"line",1,[79,85,91,97,102],{"type":18,"tag":74,"props":80,"children":82},{"style":81},"--shiki-default:#F97583",[83],{"type":24,"value":84},"struct",{"type":18,"tag":74,"props":86,"children":88},{"style":87},"--shiki-default:#B392F0",[89],{"type":24,"value":90}," Portfolio",{"type":18,"tag":74,"props":92,"children":94},{"style":93},"--shiki-default:#E1E4E8",[95],{"type":24,"value":96},": ",{"type":18,"tag":74,"props":98,"children":99},{"style":87},[100],{"type":24,"value":101},"HTML ",{"type":18,"tag":74,"props":103,"children":104},{"style":93},[105],{"type":24,"value":106},"{\n",{"type":18,"tag":74,"props":108,"children":110},{"class":76,"line":109},2,[111,116,121,126],{"type":18,"tag":74,"props":112,"children":113},{"style":81},[114],{"type":24,"value":115},"  var",{"type":18,"tag":74,"props":117,"children":118},{"style":93},[119],{"type":24,"value":120}," body: ",{"type":18,"tag":74,"props":122,"children":123},{"style":81},[124],{"type":24,"value":125},"some",{"type":18,"tag":74,"props":127,"children":128},{"style":93},[129],{"type":24,"value":130}," HTML {\n",{"type":18,"tag":74,"props":132,"children":134},{"class":76,"line":133},3,[135,141],{"type":18,"tag":74,"props":136,"children":138},{"style":137},"--shiki-default:#79B8FF",[139],{"type":24,"value":140},"    HomePage",{"type":18,"tag":74,"props":142,"children":143},{"style":93},[144],{"type":24,"value":145},"()\n",{"type":18,"tag":74,"props":147,"children":149},{"class":76,"line":148},4,[150],{"type":18,"tag":74,"props":151,"children":152},{"style":93},[153],{"type":24,"value":154},"  }\n",{"type":18,"tag":74,"props":156,"children":157},{"class":76,"line":45},[158],{"type":18,"tag":74,"props":159,"children":160},{"style":93},[161],{"type":24,"value":162},"}\n",{"type":18,"tag":19,"props":164,"children":166},{"id":165},"website-redesign",[167],{"type":24,"value":48},{"type":18,"tag":26,"props":169,"children":170},{},[171,173,179],{"type":24,"value":172},"I redesigned my website, but instead of using traditional web frameworks, I used Swift! I've also built a library called ",{"type":18,"tag":30,"props":174,"children":176},{"href":61,"rel":175},[33],[177],{"type":24,"value":178},"swift-web",{"type":24,"value":180}," which contains tools used to build this website.",{"type":18,"tag":26,"props":182,"children":183},{},[184],{"type":24,"value":185},"Feel free to check out both projects on GitHub. 😊",{"type":18,"tag":187,"props":188,"children":189},"style",{},[190],{"type":24,"value":191},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}","logs-4","..\u002F..\u002Fposts\u002Fwebsite-redesign.md",{"title":195,"description":49,"date":196,"kind":197,"links":198,"body":202,"id":209,"index":133,"path":210},"Mochi — Content Viewer for iOS and macOS",["Date","2023-12-10T00:00:00.000Z"],"project",[199],{"label":200,"href":201,"role":13},"Mochi Website","https:\u002F\u002Fmochi.erikb.dev",{"type":15,"children":203},[204],{"type":18,"tag":19,"props":205,"children":207},{"id":206},"mochi-content-viewer-for-ios-and-macos",[208],{"type":24,"value":195},"logs-3","..\u002F..\u002Fposts\u002Fmochi.md",{"title":212,"description":49,"date":213,"kind":197,"header":214,"links":218,"body":219,"id":234,"index":109,"path":235},"Anime Now! — An iOS and macOS App",["Date","2022-09-15T00:00:00.000Z"],{"type":215,"src":216,"label":217},"image","\u002Fposts\u002Fanime-now-released\u002Fan-discover.webp","Anime Now! discover image",[],{"type":15,"children":220},[221,229],{"type":18,"tag":26,"props":222,"children":223},{},[224],{"type":18,"tag":225,"props":226,"children":228},"img",{"alt":227,"src":216},"Anime Now App",[],{"type":18,"tag":19,"props":230,"children":232},{"id":231},"anime-now-an-ios-and-macos-app",[233],{"type":24,"value":212},"logs-2","..\u002F..\u002Fposts\u002Fanime-now.md",{"title":237,"description":49,"date":238,"kind":197,"header":239,"links":243,"body":244,"id":272,"index":77,"path":273},"A WLED Client for iOS",["Date","2022-08-04T00:00:00.000Z"],{"type":240,"src":241,"label":242},"video","\u002Fposts\u002Fwled-app-demo\u002Fvideo.webm","WLED App Demo\"\"",[],{"type":15,"children":245},[246,253,258],{"type":18,"tag":26,"props":247,"children":248},{},[249],{"type":18,"tag":240,"props":250,"children":252},{"autoPlay":251,"playsInline":251,"muted":251,"controls":251,"loop":251,"src":241},true,[],{"type":18,"tag":19,"props":254,"children":256},{"id":255},"a-wled-client-for-ios",[257],{"type":24,"value":237},{"type":18,"tag":26,"props":259,"children":260},{},[261,263,270],{"type":24,"value":262},"I built a native iOS app for ",{"type":18,"tag":30,"props":264,"children":267},{"href":265,"rel":266},"https:\u002F\u002Fgithub.com\u002Fwled\u002FWLED",[33],[268],{"type":24,"value":269},"WLED",{"type":24,"value":271},", an open-source LED controller for ESP32, to control my RGB LED strips.","logs-1","..\u002F..\u002Fposts\u002Fwled-client-ios.md",{"title":275,"description":276,"date":277,"kind":197,"links":278,"body":285,"id":315,"index":316,"path":317},"PrismUI — Controlling MSI RGB Keyboard on macOS","When I configured my Hackintosh, I was unable to control the RGB keyboard on my MSI laptop due to the software only being supported on Windows. To resolve this issue, my first approach was to build an app using AppKit, C++, and Objective-C to communicate with the HID keyboard, which was ultimately called SSKeyboardHue.",["Date","2021-08-08T00:00:00.000Z"],[279,282],{"label":280,"href":281,"role":13},"PrismUI on GitHub","https:\u002F\u002Fgithub.com\u002Ferikbdev\u002FPrismUI",{"label":283,"href":284,"role":62},"SSKeyboardHue on GitHub","https:\u002F\u002Fgithub.com\u002Ferikbdev\u002FSSKeyboardHue",{"type":15,"children":286},[287,292,305,310],{"type":18,"tag":19,"props":288,"children":290},{"id":289},"prismui-controlling-msi-rgb-keyboard-on-macos",[291],{"type":24,"value":275},{"type":18,"tag":26,"props":293,"children":294},{},[295,297,303],{"type":24,"value":296},"When I configured my Hackintosh, I was unable to control the RGB keyboard on my MSI laptop due to the software only being supported on Windows. To resolve this issue, my first approach was to build an app using AppKit, C++, and Objective-C to communicate with the HID keyboard, which was ultimately called ",{"type":18,"tag":30,"props":298,"children":300},{"href":284,"rel":299},[33],[301],{"type":24,"value":302},"SSKeyboardHue",{"type":24,"value":304},".",{"type":18,"tag":26,"props":306,"children":307},{},[308],{"type":24,"value":309},"Later, I decided to switch the communication protocol to Swift and redesign the front end using SwiftUI.",{"type":18,"tag":26,"props":311,"children":312},{},[313],{"type":24,"value":314},"Both projects are available on GitHub — feel free to check them out!","logs-0",0,"..\u002F..\u002Fposts\u002Fprismui.md",1777885057810]