<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://veb.co.nz/feed.xml" rel="self" type="application/atom+xml" /><link href="https://veb.co.nz/" rel="alternate" type="text/html" /><updated>2025-09-21T19:41:22+00:00</updated><id>https://veb.co.nz/feed.xml</id><title type="html">vebsite</title><subtitle>Powered by the vebserwer beta 0.1</subtitle><entry><title type="html">How to Cancel Ubisoft+ When They Hide the Cancel Button</title><link href="https://veb.co.nz/consumer-rights/tutorials/2025/09/20/cancelling-ubisoft.html" rel="alternate" type="text/html" title="How to Cancel Ubisoft+ When They Hide the Cancel Button" /><published>2025-09-20T01:30:00+00:00</published><updated>2025-09-20T01:30:00+00:00</updated><id>https://veb.co.nz/consumer-rights/tutorials/2025/09/20/cancelling-ubisoft</id><content type="html" xml:base="https://veb.co.nz/consumer-rights/tutorials/2025/09/20/cancelling-ubisoft.html"><![CDATA[<h3 id="ubisofts-dodgy-cancellation-tricks">Ubisoft’s dodgy cancellation tricks</h3>

<p>I wanted to cancel my Ubisoft+ subscription because I haven’t touched it in ages, and of course they’ve made it as painful as possible. This is known as a <strong>dark pattern</strong>.</p>

<p><strong>Common subscription dark patterns include:</strong></p>
<ul>
  <li>Making it easy to sign up but nearly impossible to cancel</li>
  <li>Hiding cancel buttons or making them hard to find</li>
  <li>Requiring you to call during “business hours” to cancel</li>
  <li>Forcing you to “fix” payment issues before allowing cancellation</li>
  <li>Making you jump through multiple confirmation screens</li>
</ul>

<h3 id="the-problem">The Problem</h3>

<p>The cancellation form exists - it’s right there in the HTML:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nt">&lt;form</span> <span class="na">action=</span><span class="s">"https://store.ubisoft.com/anz/subscription-cancellation?lang=en_NZ"</span> <span class="na">method=</span><span class="s">"post"</span><span class="nt">&gt;</span>
<span class="nt">&lt;/form&gt;</span>
</code></pre></div></div>

<p><img width="800" height="332" alt="Ubisoft subscription page showing hidden cancel button" src="https://github.com/user-attachments/assets/bc093f42-6683-4aaf-beed-721ef07ea3a5" style="max-width: 100%; height: auto;" /></p>

<p><a href="https://github.com/user-attachments/assets/0aec3be3-4111-45cf-9d92-06b5d59b402e">View full size screenshot</a></p>

<p>But instead of a “Cancel” button, they only show “Manage my payment method”. Absolute cowboys:</p>

<p><img width="800" height="332" alt="Ubisoft subscription page showing only payment management option" src="https://github.com/user-attachments/assets/b8bed0f8-d374-4b98-898d-77b15eb007aa" style="max-width: 100%; height: auto;" /></p>

<h3 id="the-solution">The Solution</h3>

<p>There’s a trick though. Open your browser console (devtools, F12) and chuck this in:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">form[name="dwfrm_subscriptioncancellation"]</span><span class="dl">'</span><span class="p">).</span><span class="nx">submit</span><span class="p">();</span>
</code></pre></div></div>

<p>You may have to type <code class="language-plaintext highlighter-rouge">allow pasting</code> for Chromium browsers (I used Brave).</p>

<p>This is what I did:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="kd">const</span> <span class="nx">form</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">form[name="dwfrm_subscriptioncancellation"]</span><span class="dl">'</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">form</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">form</span><span class="p">.</span><span class="nx">submit</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>

<p>That’ll force the form to submit even though they’ve hidden the cancel button. This should work regardless of what other buttons they show or hide.</p>

<h3 id="the-legal-side">The Legal Side</h3>

<p>This kind of crap is probably illegal under the Fair Trading Act in NZ. Under the Act, businesses can’t use misleading or deceptive conduct, and subscription services should make cancellation “as easy as signing up.”</p>

<p>You could file a complaint with the <a href="https://comcom.govt.nz">Commerce Commission</a> if you’re feeling motivated.</p>]]></content><author><name>Mike Mackenzie</name></author><category term="consumer-rights" /><category term="tutorials" /><category term="ubisoft-plus" /><category term="cancel-subscription" /><category term="consumer-rights" /><category term="tutorials" /><category term="new-zealand" /><category term="dark-patterns" /><summary type="html"><![CDATA[Ubisoft makes it nearly impossible to cancel subscriptions by hiding the cancel button. Here's how to force cancellation using browser dev tools.]]></summary></entry><entry><title type="html">How to join a guest/free wifi on Mac</title><link href="https://veb.co.nz/tutorials/2023/02/15/free-guest-wifi-not-working-for-mac.html" rel="alternate" type="text/html" title="How to join a guest/free wifi on Mac" /><published>2023-02-15T20:40:12+00:00</published><updated>2023-02-15T20:40:12+00:00</updated><id>https://veb.co.nz/tutorials/2023/02/15/free-guest-wifi-not-working-for-mac</id><content type="html" xml:base="https://veb.co.nz/tutorials/2023/02/15/free-guest-wifi-not-working-for-mac.html"><![CDATA[<h3 id="how-to-join-a-guestfree-wifi-on-mac">How to join a guest/free wifi on Mac</h3>

<p>If you need to join a free WiFi (like the Dunedin Hospital - Southern DHB) you may get a bit annoyed when trying with a Mac because the “acceptance screen” doesn’t show up.</p>

<p>There’s a wee trick to this however. Once you’ve selected the WiFi network, wait a couple of minutes then direct your browser to: <a href="http://captive.apple.com">http://captive.apple.com/</a></p>

<p>If this does not bring up the “Yes pls I accept your terms” screen (aka “acceptance screen”), go to System Preferences, Network, find your wireless connection.</p>

<p>Click the advanced button.</p>

<p>Choose the DNS tab.</p>

<p><img width="780" alt="image" src="https://user-images.githubusercontent.com/376245/219148335-34921082-b167-4e25-b915-1c52092d889d.png" /></p>

<p>You want to remove it:</p>

<p><img width="323" alt="image" src="https://user-images.githubusercontent.com/376245/219148397-63a077c7-89ba-4bc4-8388-7bb5db2f688f.png" /></p>

<p>Click OK. Go back to the captive.apple.com page and refresh. Voilà!</p>]]></content><author><name>Mike Mackenzie</name></author><category term="tutorials" /><category term="talks" /><category term="tutorials" /><summary type="html"><![CDATA[How to join a guest/free wifi on Mac]]></summary></entry><entry><title type="html">How to watch Freevee without ads</title><link href="https://veb.co.nz/tutorials/2023/01/27/freevee-adblock.html" rel="alternate" type="text/html" title="How to watch Freevee without ads" /><published>2023-01-27T02:40:12+00:00</published><updated>2023-01-27T02:40:12+00:00</updated><id>https://veb.co.nz/tutorials/2023/01/27/freevee-adblock</id><content type="html" xml:base="https://veb.co.nz/tutorials/2023/01/27/freevee-adblock.html"><![CDATA[<h3 id="using-javascript-inside-a-bookmarklet-to-skip-ads-on-freevee">Using Javascript inside a bookmarklet to skip ads on Freevee</h3>

<h1 id="-how-to-block-ads-on-freevee">… how to block ads on Freevee</h1>

<p>If you have watched things on Freevee before, you would’ve noticed it has quite a few long ads throughout.</p>

<p>Thankfully it’s easy enough to skip over them in any Chromium browser (I use Brave). Probably the same for Firefox.</p>

<p>Simply add a new bookmark, and put whatever as the title like <code class="language-plaintext highlighter-rouge">Skip Freevee Ads</code></p>

<p><img width="554" alt="image" src="https://user-images.githubusercontent.com/376245/214998698-54b94f0c-ae47-43ee-8f3f-2ee30d231259.png" /></p>

<p>For the URL enter the following:</p>

<p><sup>note this code is long (not wrapped), so make sure you select all then copy</sup></p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nx">javascript</span><span class="p">:</span><span class="nx">setInterval</span><span class="p">((()</span><span class="o">=&gt;</span><span class="p">{</span><span class="kd">var</span> <span class="nx">e</span><span class="o">=</span><span class="nb">document</span><span class="p">.</span><span class="nx">querySelectorAll</span><span class="p">(</span><span class="dl">'</span><span class="s1">div[class*=%22atvwebplayersdk-adtimeindicator-text%22]</span><span class="dl">'</span><span class="p">);</span><span class="k">if</span><span class="p">(</span><span class="nx">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">&amp;&amp;</span><span class="nx">e</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">innerText</span><span class="p">.</span><span class="nx">length</span><span class="o">&gt;</span><span class="mi">2</span><span class="p">){</span><span class="kd">var</span> <span class="nx">t</span><span class="o">=</span><span class="nx">e</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">innerText</span><span class="p">;</span><span class="nx">t</span><span class="o">=</span><span class="nx">t</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/</span><span class="se">\d</span><span class="sr">* sec/g</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">replace</span><span class="p">(</span><span class="o">%</span><span class="mi">22</span><span class="nx">sec</span><span class="o">%</span><span class="mi">22</span><span class="p">,</span><span class="o">%</span><span class="mi">22</span><span class="o">%</span><span class="mi">22</span><span class="p">).</span><span class="nx">trim</span><span class="p">(),</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="o">%</span><span class="mi">22</span><span class="nx">video</span><span class="o">%</span><span class="mi">22</span><span class="p">)[</span><span class="mi">1</span><span class="p">].</span><span class="nx">currentTime</span><span class="o">=</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="o">%</span><span class="mi">22</span><span class="nx">video</span><span class="o">%</span><span class="mi">22</span><span class="p">)[</span><span class="mi">1</span><span class="p">].</span><span class="nx">currentTime</span><span class="o">+</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">}}),</span><span class="mi">2</span><span class="nx">e3</span><span class="p">);</span>
</code></pre></div></div>

<p>When you have whatever you’re watching open simply click the bookmarklet button and it’ll skip every ad break, and the bookmarklet only needs to be clicked once. 🙈</p>

<p><img width="496" alt="image" src="https://user-images.githubusercontent.com/376245/215000387-dcd93a33-1113-432e-b6d0-042ad35520c5.png" /></p>

<p>Enjoy! 🎉</p>]]></content><author><name>Mike Mackenzie</name></author><category term="tutorials" /><category term="talks" /><category term="tutorials" /><category term="freevee" /><category term="television" /><category term="amazon" /><category term="primevideo" /><category term="bookmarklet" /><category term="extension" /><summary type="html"><![CDATA[Using Javascript inside a bookmarklet to skip ads on Freevee]]></summary></entry><entry><title type="html">CodeCraft Dunedin</title><link href="https://veb.co.nz/programming/development/software/talks/tutorials/2021/02/17/CodeCraft-Dunedin.html" rel="alternate" type="text/html" title="CodeCraft Dunedin" /><published>2021-02-17T05:10:34+00:00</published><updated>2021-02-17T05:10:34+00:00</updated><id>https://veb.co.nz/programming/development/software/talks/tutorials/2021/02/17/CodeCraft-Dunedin</id><content type="html" xml:base="https://veb.co.nz/programming/development/software/talks/tutorials/2021/02/17/CodeCraft-Dunedin.html"><![CDATA[<h1 id="codecraft-dunedin">CodeCraft Dunedin</h1>

<p>Hi all,</p>

<p>I know I haven’t been particularly active in blogging however I must tell you about CodeCraft Dunedin.</p>

<p>Anyone is allowed to come along to the talks, no matter who you are or what you are (I mean, puppies are pretty awesome). Senior developers, junior developers or even people who are studying for their compsci degree or similar.</p>

<p>We want to create a place where anyone in the world can see these talks and tutorials because they are full of amazing information and it should be documented and that’s exactly what the CodeCraft website is for.</p>

<p>It’s still under construction and so on, but check it out: <a href="https://codecraft.org.nz/">https://codecraft.org.nz/</a></p>

<p>Ian Rees managed to create a really awesome article on <strong>Modern Embedded Debugging “Show-and-tell”</strong></p>

<p>Check it out here: <a href="https://codecraft.org.nz/talks/2020-11-03-rust-embedded-debugging.html">https://codecraft.org.nz/talks/2020-11-03-rust-embedded-debugging.html</a></p>

<p>I hope to continue helping CodeCraft and I really do want to expand the audience and if we can reach the far corners of the world, then you’ll know that Dunedin really is the best city in the entire world. 😇</p>]]></content><author><name>Mike Mackenzie</name></author><category term="programming" /><category term="development" /><category term="software" /><category term="talks" /><category term="tutorials" /><summary type="html"><![CDATA[CodeCraft Dunedin]]></summary></entry><entry><title type="html">How to fix dark mode not working properly on macOS Catalina</title><link href="https://veb.co.nz/macos/apple/chrome/safari/darkmode/2020/12/05/fix-dark-mode-mac-os.html" rel="alternate" type="text/html" title="How to fix dark mode not working properly on macOS Catalina" /><published>2020-12-05T08:10:34+00:00</published><updated>2020-12-05T08:10:34+00:00</updated><id>https://veb.co.nz/macos/apple/chrome/safari/darkmode/2020/12/05/fix-dark-mode-mac-os</id><content type="html" xml:base="https://veb.co.nz/macos/apple/chrome/safari/darkmode/2020/12/05/fix-dark-mode-mac-os.html"><![CDATA[<h1 id="how-to-fix-the-problem-of-fixing-an-unworking-darkmode">How to fix the problem of fixing an unworking darkmode?!</h1>

<p>It took me a while to realise that it wasn’t working properly. It took me even longer to figure out what I could do about it. Everyone’s simply wandering around the internet thinking that everything’s fine. IT’S NOT!</p>

<p>If I asked any friends, they’d be like “nah everything’s fine”, that didn’t help me much.</p>

<p>Anyway. Open Terminal (<code class="language-plaintext highlighter-rouge">Terminal.app</code>) and run this;</p>

<div class="language-zsh highlighter-rouge"><div class="highlight"><pre class="syntax"><code>defaults write <span class="nt">-g</span> NSRequiresAquaSystemAppearance <span class="nt">-bool</span> No
</code></pre></div></div>

<p>This was the command that we used in Mojave to toggle dark mode on/off for individual apps.</p>

<p>You’ll have to log off and log back in for it to work as well.</p>

<p>If it doesn’t work, then I don’t have a damn clue - sorry.</p>]]></content><author><name>Mike Mackenzie</name></author><category term="macOS" /><category term="apple" /><category term="chrome" /><category term="safari" /><category term="darkmode" /><summary type="html"><![CDATA[How to fix the problem of fixing an unworking darkmode?!]]></summary></entry><entry><title type="html">How to avoid using relative path imports in create-react-app</title><link href="https://veb.co.nz/react/create-react-app/code/tip/vscode/2020/12/05/avoid-using-relative-paths-in-react.html" rel="alternate" type="text/html" title="How to avoid using relative path imports in create-react-app" /><published>2020-12-05T05:10:34+00:00</published><updated>2020-12-05T05:10:34+00:00</updated><id>https://veb.co.nz/react/create-react-app/code/tip/vscode/2020/12/05/avoid-using-relative-paths-in-react</id><content type="html" xml:base="https://veb.co.nz/react/create-react-app/code/tip/vscode/2020/12/05/avoid-using-relative-paths-in-react.html"><![CDATA[<h1 id="how-to-avoid-using-relative-path-imports">How to avoid using relative path imports</h1>

<h3 id="like-publicassetssvgbobsvg">Like (/../../../public/assets/SVG/bob.svg)</h3>

<p>This project I’m doing at the moment was created with <code class="language-plaintext highlighter-rouge">create-react-app</code> and uses <code class="language-plaintext highlighter-rouge">nextjs</code> and I use Visual Studio Code (vscode).</p>

<p>It’s pretty simple. Say your directory list looks like this (you may not yet have a <code class="language-plaintext highlighter-rouge">.env </code> file)</p>

<p><img src="https://i.imgur.com/agcU257.png" alt="image of my directory structure" /></p>

<p>Here’s the problem:</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="k">import</span> <span class="nx">ShrubLogo</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">../../../public/assets/SVG/shrbgrasslesslogo.svg</span><span class="dl">"</span><span class="p">;</span>
</code></pre></div></div>

<p>It looks crappy and It’s harder to read. Instead why don’t we create an <code class="language-plaintext highlighter-rouge">.env</code> file (as seen in my screenshot above), and put in:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nv">PUBLIC_PATH</span><span class="o">=</span>public
</code></pre></div></div>

<p>From now on when you want to reference something from the public directory all you need to do is:</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="k">import</span> <span class="nx">ShrubLogo</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">public/assets/SVG/shrbgrasslesslogo.svg</span><span class="dl">"</span><span class="p">;</span>
</code></pre></div></div>

<p>Makes it much easier to read and to code.</p>

<p>The other option, and the option that may have superseded in the above (<strong>but make sure you have vscode</strong>) by making sure you have a:</p>

<p><code class="language-plaintext highlighter-rouge">jsconfig.json</code> file and making sure it has:</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">{</span>
  <span class="dl">"</span><span class="s2">compilerOptions</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">baseUrl</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">.</span><span class="dl">"</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>If you choose this option, then everything will have root level import.</p>

<p>Another trick is that if you want to get fancy is by doing this:</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">{</span>
  <span class="dl">"</span><span class="s2">compilerOptions</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
    <span class="dl">"</span><span class="s2">baseUrl</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">.</span><span class="dl">"</span><span class="p">,</span>
    <span class="dl">"</span><span class="s2">paths</span><span class="dl">"</span><span class="p">:</span> <span class="p">{</span>
      <span class="dl">"</span><span class="s2">@components/*</span><span class="dl">"</span><span class="p">:</span> <span class="p">[</span>
        <span class="dl">"</span><span class="s2">src/components/*</span><span class="dl">"</span>
      <span class="p">]</span>
    <span class="p">}</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Then you can do:</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Layout</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">@components/layout</span><span class="dl">"</span><span class="p">;</span>
</code></pre></div></div>

<p>instead of</p>

<div class="language-react highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Layout</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">src/components/layout</span><span class="dl">"</span><span class="p">;</span>
</code></pre></div></div>

<p>There’s so many options and tricks to use out there for this sort of thing, but for the last half of this small post, you can read more about what you can do with <code class="language-plaintext highlighter-rouge">jsconfig.json</code> at <a href="https://code.visualstudio.com/docs/languages/jsconfig">https://code.visualstudio.com/docs/languages/jsconfig</a></p>]]></content><author><name>Mike Mackenzie</name></author><category term="react" /><category term="create-react-app" /><category term="code" /><category term="tip" /><category term="vscode" /><summary type="html"><![CDATA[How to avoid using relative path imports]]></summary></entry><entry><title type="html">Could not locate installed application</title><link href="https://veb.co.nz/fastlane/react-native/code/production/2019/12/10/could-not-locate-the-installed-application.html" rel="alternate" type="text/html" title="Could not locate installed application" /><published>2019-12-10T07:10:34+00:00</published><updated>2019-12-10T07:10:34+00:00</updated><id>https://veb.co.nz/fastlane/react-native/code/production/2019/12/10/could-not-locate-the-installed-application</id><content type="html" xml:base="https://veb.co.nz/fastlane/react-native/code/production/2019/12/10/could-not-locate-the-installed-application.html"><![CDATA[<h2 id="another-easy-fix">Another… easy fix.</h2>
<h1 id="could-not-locate-installed-application">Could not locate installed application</h1>

<p><img src="https://i.imgur.com/LLbP5l9.png," alt="Could not locate installed application in xcode" title="install claimed to have succeded, but application could not be found on devuce bundleId =" /></p>

<p>Whenever I receieved this frustrating error when trying to debug my app on a live device, it kept frustrating the heck out of me… until I realised that I’d forgotten to turn back on Automatic Signing in XCode.</p>

<p>I usually leave it off for Fastlane, which does all my certificates n such for me, but yeah this wasn’t exactly the most… forthcoming error to have.</p>

<p>Hope it helps someone.</p>]]></content><author><name>Mike Mackenzie</name></author><category term="fastlane" /><category term="react-native" /><category term="code" /><category term="production" /><summary type="html"><![CDATA[Another… easy fix. Could not locate installed application]]></summary></entry><entry><title type="html">Fastlane not working on macOS Catalina?</title><link href="https://veb.co.nz/fastlane/react-native/code/production/2019/10/31/fastlane-gem.html" rel="alternate" type="text/html" title="Fastlane not working on macOS Catalina?" /><published>2019-10-31T07:49:34+00:00</published><updated>2019-10-31T07:49:34+00:00</updated><id>https://veb.co.nz/fastlane/react-native/code/production/2019/10/31/fastlane-gem</id><content type="html" xml:base="https://veb.co.nz/fastlane/react-native/code/production/2019/10/31/fastlane-gem.html"><![CDATA[<h2 id="easy-fix">Easy fix.</h2>

<p>Whenever I tried to run the <code class="language-plaintext highlighter-rouge">fastlane</code> command, I was greeted with:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code>Traceback <span class="o">(</span>most recent call last<span class="o">)</span>:
	8: from /Users/mike/gems/bin/fastlane:23:in <span class="sb">`</span>&lt;main&gt;<span class="s1">'
	7: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:303:in `activate_bin_path'</span>
	6: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:303:in <span class="sb">`</span>synchronize<span class="s1">'
	5: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:304:in `block in activate_bin_path'</span>
	4: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification.rb:1420:in <span class="sb">`</span>activate<span class="s1">'
	3: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification.rb:1438:in `activate_dependencies'</span>
	2: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification.rb:1438:in <span class="sb">`</span>each<span class="s1">'
	1: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/specification.rb:1449:in `block in activate_dependencies'</span>
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/dependency.rb:311:in <span class="sb">`</span>to_specs<span class="s1">': Could not find '</span>slack-notifier<span class="s1">' (&gt;= 2.0.0, &lt; 3.0.0) among 146 total gem(s) (Gem::MissingSpecError)
Checked in '</span><span class="nv">GEM_PATH</span><span class="o">=</span>/Users/mike/.gem/ruby/2.6.0:/Library/Ruby/Gems/2.6.0:/Users/mike/gems:/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0<span class="s1">', execute `gem env` for more information
</span></code></pre></div></div>

<p>An easy fix to this is simply to reinstall/upgrade <code class="language-plaintext highlighter-rouge">fastlane</code> by running <code class="language-plaintext highlighter-rouge">sudo gem install fastlane -NV</code></p>

<p>Thar she blows! It’s always a panicky situation when you’re trying to push something out the door and you’re greeted with such an error, it sucks but that’s our job!</p>

<p>Hope this helps someone.</p>]]></content><author><name>Mike Mackenzie</name></author><category term="fastlane" /><category term="react-native" /><category term="code" /><category term="production" /><summary type="html"><![CDATA[Easy fix.]]></summary></entry><entry><title type="html">Can’t insert emojis on macOS Catalina?</title><link href="https://veb.co.nz/macos/catalina/2019/10/22/macOS-Catalina-emoji-not-inserting.html" rel="alternate" type="text/html" title="Can’t insert emojis on macOS Catalina?" /><published>2019-10-22T18:59:34+00:00</published><updated>2019-10-22T18:59:34+00:00</updated><id>https://veb.co.nz/macos/catalina/2019/10/22/macOS-Catalina-emoji-not-inserting</id><content type="html" xml:base="https://veb.co.nz/macos/catalina/2019/10/22/macOS-Catalina-emoji-not-inserting.html"><![CDATA[<h2 id="however-shall-i-cope-without-my-emojis">However shall I cope without my emojis?!</h2>

<p>I had an issue where pressing option + ctrl + spacebar would bring up the emoji menu. However it would not let me insert it into whatever text I wanted (I like putting emojis everywhere in my code when debugging).</p>

<p>In <code class="language-plaintext highlighter-rouge">Terminal.app</code></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nb">rm</span> <span class="nt">-rf</span> ~/Library/Preferences/com.apple.CharacterPaletteIM.plist
<span class="nb">rm</span> <span class="nt">-rf</span> ~/Library/Preferences/com.apple.CharacterPicker.plist
</code></pre></div></div>

<p>You could probably move them (as a backup if you so wished):</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nb">mv</span> ~/Library/Preferences/com.apple.CharacterPaletteIM.plist_backup
<span class="nb">mv</span> ~/Library/Preferences/com.apple.CharacterPicker.plist_backup
</code></pre></div></div>

<p>Now reboot.</p>

<p>And have fun emoji spamming everyone. 😇</p>]]></content><author><name>Mike Mackenzie</name></author><category term="macOS" /><category term="catalina" /><summary type="html"><![CDATA[However shall I cope without my emojis?!]]></summary></entry><entry><title type="html">Pod install not working on macOS Catalina?</title><link href="https://veb.co.nz/iphone/error/react-native/ruby/xcode/catalina/macos/code/2019/10/20/Pod-Error-React-Native-Catalina.html" rel="alternate" type="text/html" title="Pod install not working on macOS Catalina?" /><published>2019-10-20T06:17:23+00:00</published><updated>2019-10-20T06:17:23+00:00</updated><id>https://veb.co.nz/iphone/error/react-native/ruby/xcode/catalina/macos/code/2019/10/20/Pod-Error-React-Native-Catalina</id><content type="html" xml:base="https://veb.co.nz/iphone/error/react-native/ruby/xcode/catalina/macos/code/2019/10/20/Pod-Error-React-Native-Catalina.html"><![CDATA[<h2 id="pod-problems-again">Pod problems… again.</h2>

<p><strong>Just remember, USE the workspace version of xcode</strong></p>

<p><em>See the end for my conclusion first, before going through my horrible process that aged me 5 billion years.</em></p>

<p>If you run into this error:</p>

<figure class="highlight"><pre><code class="language-terminal" data-lang="terminal"><span class="go">Error:  System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby:

  bad interpreter: No such file or directory</span></code></pre></figure>

<p>All you need to do is run:</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell"><span class="nb">sudo </span>gem <span class="nb">install</span> <span class="nt">-n</span> /usr/local/bin cocoapods</code></pre></figure>

<p>If that doesn’t help then continue reading…</p>

<p>The issue that arose as I was having to build from Xcode to my iPhone was:</p>

<figure class="highlight"><pre><code class="language-terminal" data-lang="terminal"><span class="go">Library not found for -lBase64</span></code></pre></figure>

<p>Okay. Maybe it’s got something to do with my Xcode not being the latest version… perhaps I need <code class="language-plaintext highlighter-rouge">Xcode 11.1</code></p>

<p>So I went into the Apple Appstore and updated Xcode… which wouldn’t update.</p>

<p>They thoughtfully gave me this instead of updating Xcode for me:</p>

<p><img src="https://i.imgur.com/goRNjjU.png" alt="alt text" title="FFS Apple- why can't you just WORK?!" /></p>

<p>So then I angrily deleted Xcode and then went to try download it via appstore, and it just kept telling me to login.</p>

<p>Fortunately, you can download it directly from Apple, <a href="https://developer.apple.com/download/more/">Apple Download</a></p>

<p><img src="https://i.imgur.com/iN9Fka6.png" alt="alt text" title="Downloading xcode from Apple" /></p>

<p>After the download is finished, it will take approximately 5 million years to verify, then it’ll take 160 million years to expand the <code class="language-plaintext highlighter-rouge">Xcode.app</code>. Once done, move into your <code class="language-plaintext highlighter-rouge">Applications</code> directory.</p>

<p>Open and it’ll ask you to install some additional components, but that only took 2 years, so that was good.</p>

<p>Go back to your project, and run again (I’m trying to get the React-Native app on my iPhone)</p>

<p>Guess what? That didn’t work either. Keeps crying about:</p>

<figure class="highlight"><pre><code class="language-terminal" data-lang="terminal"><span class="go">Directory not found for option '-L/Users/mike/Library/Developer/Xcode/DerivedData/blah-dhvqffposgnfddauwtuhbxzbhlpr/Build/Products/Debug-iphonesimulator/Base64'</span></code></pre></figure>

<p>Sigh. So I threw the computer out the window. But not really.</p>

<p>At the bottom of the “bunch of errors”, the last one was a ‘FileBrowser’ - so I removed it from my build targets, and it ran without errors.</p>

<p><img src="https://i.imgur.com/4XomjJV.png" alt="alt text" title="Freaking ERRRRRRRORS EVERYWHEREEEEEE" /></p>

<p>Then I clicked <code class="language-plaintext highlighter-rouge">Automatic Signing</code> because that’s for dev after all (I use FastLane for pushing to appstore/testflight).</p>

<p>It finally worked, and loaded on my phone. So… now I have to figure out what was using the package that I removed from my targets. Eh, easier than this bloody process!</p>

<p>Hope this helps any internet strangers who had the same issue(s). My conclusion is you probably don’t have to update Xcode, but find the target/package that’s being a bum.</p>

<p>Have fun folks!</p>]]></content><author><name>Mike Mackenzie</name></author><category term="iphone" /><category term="error" /><category term="react-native" /><category term="ruby" /><category term="Xcode" /><category term="catalina" /><category term="macOS" /><category term="code" /><summary type="html"><![CDATA[Pod problems… again.]]></summary></entry></feed>