textiot
Version:
A framework for building web and native (IoT) Dapps on the IPFS network
658 lines (636 loc) • 38.1 kB
HTML
<html lang="en">
<head>
<title>FilesApi Class Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset='utf-8'>
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
</head>
<body>
<a name="//apple_ref/objc/Class/FilesApi" class="dashAnchor"></a>
<a title="FilesApi Class Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="../index.html">Textile Docs</a> (80% documented)</p>
<p class="header-right"><a href="https://github.com/textileio/ios-textile"><img src="../img/gh.png"/>View on GitHub</a></p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="../index.html">Textile Reference</a>
<img id="carat" src="../img/carat.png" />
FilesApi Class Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="../Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Classes/AccountApi.html">AccountApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/CafesApi.html">CafesApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/CommentsApi.html">CommentsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/ContactsApi.html">ContactsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/FeedApi.html">FeedApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/FeedItemData.html">FeedItemData</a>
</li>
<li class="nav-group-task">
<a href="../Classes/FilesApi.html">FilesApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/FlagsApi.html">FlagsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/IgnoresApi.html">IgnoresApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/InvitesApi.html">InvitesApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/IpfsApi.html">IpfsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/LikesApi.html">LikesApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/LogsApi.html">LogsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/MessagesApi.html">MessagesApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/NotificationsApi.html">NotificationsApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/ProfileApi.html">ProfileApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SchemasApi.html">SchemasApi</a>
</li>
<li class="nav-group-task">
<a href="../Classes/Textile.html">Textile</a>
</li>
<li class="nav-group-task">
<a href="../Classes/ThreadsApi.html">ThreadsApi</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Constants.html">Constants</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Constants.html#/c:@TEXTILE_BACKGROUND_SESSION_ID">TEXTILE_BACKGROUND_SESSION_ID</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Protocols/TextileDelegate.html">TextileDelegate</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Type%20Definitions.html">Type Definitions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Type%20Definitions/FeedItemType.html">FeedItemType</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>FilesApi</h1>
<div class="declaration">
<div class="language">
<pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FilesApi</span> <span class="p">:</span> <span class="nc">NodeDependant</span></code></pre>
</div>
</div>
<p>Provides access to Textile files related APIs</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)addData:threadId:caption:completion:"></a>
<a name="//apple_ref/objc/Method/-addData:threadId:caption:completion:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)addData:threadId:caption:completion:">-addData:threadId:caption:completion:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Add raw data to a Textile thread</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">addData</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">base64</span>
<span class="nf">threadId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">threadId</span>
<span class="nf">caption</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">caption</span>
<span class="nf">completion</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">int</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="nv">completion</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">addData</span><span class="p">(</span><span class="n">_</span> <span class="nv">base64</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">threadId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">caption</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">UnsafeMutablePointer</span><span class="o"><</span><span class="kt">Int32</span><span class="o">></span><span class="p">?,</span> <span class="kt">Error</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>base64</em>
</code>
</td>
<td>
<div>
<p>Raw data as base64 string</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>threadId</em>
</code>
</td>
<td>
<div>
<p>The thread id the data will be added to</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>caption</em>
</code>
</td>
<td>
<div>
<p>A caption to associate with the data</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block that will get called with the results of the add operation</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)addFiles:threadId:caption:completion:"></a>
<a name="//apple_ref/objc/Method/-addFiles:threadId:caption:completion:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)addFiles:threadId:caption:completion:">-addFiles:threadId:caption:completion:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Add files to a Textile thread</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">addFiles</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">files</span>
<span class="nf">threadId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">threadId</span>
<span class="nf">caption</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">caption</span>
<span class="nf">completion</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">int</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="nv">completion</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">addFiles</span><span class="p">(</span><span class="n">_</span> <span class="nv">files</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">threadId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">caption</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">UnsafeMutablePointer</span><span class="o"><</span><span class="kt">Int32</span><span class="o">></span><span class="p">?,</span> <span class="kt">Error</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>files</em>
</code>
</td>
<td>
<div>
<p>A comma-separated list of file paths to add, paths can be file system paths, IPFS hashes, or an existing file hash that may need decryption</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>threadId</em>
</code>
</td>
<td>
<div>
<p>The thread id the files will be added to</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>caption</em>
</code>
</td>
<td>
<div>
<p>A caption to associate with the files</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block that will get called with the results of the add operation</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)shareFiles:threadId:caption:completion:"></a>
<a name="//apple_ref/objc/Method/-shareFiles:threadId:caption:completion:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)shareFiles:threadId:caption:completion:">-shareFiles:threadId:caption:completion:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Share files already aded to a Textile thread to a Textile thread</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">shareFiles</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">target</span>
<span class="nf">threadId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">threadId</span>
<span class="nf">caption</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">caption</span>
<span class="nf">completion</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">int</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="nv">completion</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">shareFiles</span><span class="p">(</span><span class="n">_</span> <span class="nv">target</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">threadId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">caption</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">UnsafeMutablePointer</span><span class="o"><</span><span class="kt">Int32</span><span class="o">></span><span class="p">?,</span> <span class="kt">Error</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>target</em>
</code>
</td>
<td>
<div>
<p>The source thread target of the files to share</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>threadId</em>
</code>
</td>
<td>
<div>
<p>The thread id the files will be shared to</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>caption</em>
</code>
</td>
<td>
<div>
<p>A caption to associate with the files</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block that will get called with the results of the add operation</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)list:offset:limit:error:"></a>
<a name="//apple_ref/objc/Method/-list:offset:limit:error:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)list:offset:limit:error:">-list:offset:limit:error:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Get a list of files data from a thread</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">list</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">threadId</span>
<span class="nf">offset</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">offset</span>
<span class="nf">limit</span><span class="p">:(</span><span class="kt">long</span><span class="p">)</span><span class="nv">limit</span>
<span class="nf">error</span><span class="p">:(</span><span class="n">NSError</span> <span class="o">*</span><span class="n">_Nullable</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">error</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">list</span><span class="p">(</span><span class="n">_</span> <span class="nv">threadId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">offset</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">limit</span><span class="p">:</span> <span class="kt">Int</span><span class="p">)</span> <span class="k">throws</span> <span class="o">-></span> <span class="kt">Any</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>threadId</em>
</code>
</td>
<td>
<div>
<p>The thread to query</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>offset</em>
</code>
</td>
<td>
<div>
<p>The offset to beging querying from</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>limit</em>
</code>
</td>
<td>
<div>
<p>The max number of results to return</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>error</em>
</code>
</td>
<td>
<div>
<p>A reference to an error pointer that will be set in the case of an error</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<h4>Return Value</h4>
<p>An object containing a list of files data</p>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)content:completion:"></a>
<a name="//apple_ref/objc/Method/-content:completion:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)content:completion:">-content:completion:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Get raw data for a file hash</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">content</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">hash</span>
<span class="nf">completion</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n">NSData</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span>
<span class="n">NSError</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="n">completion</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">content</span><span class="p">(</span><span class="n">_</span> <span class="nv">hash</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">Data</span><span class="p">?,</span> <span class="kt">String</span><span class="p">?,</span> <span class="kt">Error</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>hash</em>
</code>
</td>
<td>
<div>
<p>The hash to return data for</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block that will get called with the results of content</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(cs)FilesApi(im)imageContentForMinWidth:minWidth:completion:"></a>
<a name="//apple_ref/objc/Method/-imageContentForMinWidth:minWidth:completion:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(cs)FilesApi(im)imageContentForMinWidth:minWidth:completion:">-imageContentForMinWidth:minWidth:completion:</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Helper function to return the most appropriate image data for a minimun image width</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">imageContentForMinWidth</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">path</span>
<span class="nf">minWidth</span><span class="p">:(</span><span class="kt">long</span><span class="p">)</span><span class="nv">minWidth</span>
<span class="nf">completion</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n">NSData</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span>
<span class="n">NSString</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span>
<span class="n">NSError</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="n">completion</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">imageContent</span><span class="p">(</span><span class="n">forMinWidth</span> <span class="nv">path</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">minWidth</span><span class="p">:</span> <span class="kt">Int</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">Data</span><span class="p">?,</span> <span class="kt">String</span><span class="p">?,</span> <span class="kt">Error</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>path</em>
</code>
</td>
<td>
<div>
<p>The IPFS path that includes image data for various image sizes</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>minWidth</em>
</code>
</td>
<td>
<div>
<p>The width of the image the data will be used for</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block that will get called with the results of content</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>© 2019 <a class="link" href="https://textile.io" target="_blank" rel="external">Textile</a>. All rights reserved. (Last updated: 2019-11-19)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.12.0</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>