renpy/doc/ios.html
2023-01-18 23:13:55 +01:00

364 lines
21 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>iOS &#8212; Ren&#39;Py Documentation</title>
<link rel="stylesheet" href="_static/renpydoc.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/js/jquery-fix.js"></script>
<script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="_static/bootstrap-sphinx.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="In-App Purchasing" href="iap.html" />
<link rel="prev" title="Chrome OS/Chromebook" href="chromeos.html" />
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
<meta name="apple-mobile-web-app-capable" content="yes">
</head><body>
<div id="navbar" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">
Ren&#39;Py Documentation</a>
<span class="navbar-text navbar-version pull-left"><b>7.5.3</b></span>
</div>
<div class="collapse navbar-collapse nav-collapse">
<ul class="nav navbar-nav">
<li><a href="https://www.renpy.org">Home Page</a></li>
<li><a href="https://www.renpy.org/doc/html/">Online Documentation</a></li>
<li class="dropdown globaltoc-container">
<a role="button"
id="dLabelGlobalToc"
data-toggle="dropdown"
data-target="#"
href="index.html">Site <b class="caret"></b></a>
<ul class="dropdown-menu globaltoc"
role="menu"
aria-labelledby="dLabelGlobalToc"><ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="gui.html">GUI Customization Guide</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="language_basics.html">Language Basics</a></li>
<li class="toctree-l1"><a class="reference internal" href="label.html">Labels &amp; Control Flow</a></li>
<li class="toctree-l1"><a class="reference internal" href="dialogue.html">Dialogue and Narration</a></li>
<li class="toctree-l1"><a class="reference internal" href="displaying_images.html">Displaying Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="menus.html">In-Game Menus</a></li>
<li class="toctree-l1"><a class="reference internal" href="python.html">Python Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="conditional.html">Conditional Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="audio.html">Audio</a></li>
<li class="toctree-l1"><a class="reference internal" href="movie.html">Movie</a></li>
<li class="toctree-l1"><a class="reference internal" href="voice.html">Voice</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="text.html">Text</a></li>
<li class="toctree-l1"><a class="reference internal" href="translation.html">Translation</a></li>
<li class="toctree-l1"><a class="reference internal" href="displayables.html">Displayables</a></li>
<li class="toctree-l1"><a class="reference internal" href="transforms.html">Transforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="transitions.html">Transitions</a></li>
<li class="toctree-l1"><a class="reference internal" href="atl.html">Animation and Transformation Language</a></li>
<li class="toctree-l1"><a class="reference internal" href="matrixcolor.html">Matrixcolor</a></li>
<li class="toctree-l1"><a class="reference internal" href="layeredimage.html">Layered Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="3dstage.html">3D Stage</a></li>
<li class="toctree-l1"><a class="reference internal" href="live2d.html">Live2D Cubism</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="style.html">Styles</a></li>
<li class="toctree-l1"><a class="reference internal" href="style_properties.html">Style Properties</a></li>
<li class="toctree-l1"><a class="reference internal" href="screens.html">Screens and Screen Language</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_actions.html">Screen Actions, Values, and Functions</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_special.html">Special Screen Names</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_optimization.html">Screen Language Optimization</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="preferences.html">Preference Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="store_variables.html">Store Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="mouse.html">Custom Mouse Cursors</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="launcher.html">Launcher</a></li>
<li class="toctree-l1"><a class="reference internal" href="developer_tools.html">Developer Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="director.html">Interactive Director</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="nvl_mode.html">NVL-Mode Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="input.html">Text Input</a></li>
<li class="toctree-l1"><a class="reference internal" href="side_image.html">Side Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="rooms.html">Image Gallery, Music Room, and Replay Actions</a></li>
<li class="toctree-l1"><a class="reference internal" href="drag_drop.html">Drag and Drop</a></li>
<li class="toctree-l1"><a class="reference internal" href="sprites.html">Sprites</a></li>
<li class="toctree-l1"><a class="reference internal" href="keymap.html">Customizing the Keymap</a></li>
<li class="toctree-l1"><a class="reference internal" href="achievement.html">Achievements</a></li>
<li class="toctree-l1"><a class="reference internal" href="history.html">Dialogue History</a></li>
<li class="toctree-l1"><a class="reference internal" href="multiple.html">Multiple Character Dialogue</a></li>
<li class="toctree-l1"><a class="reference internal" href="splashscreen_presplash.html">Splashscreen and Presplash</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="statement_equivalents.html">Statement Equivalents</a></li>
<li class="toctree-l1"><a class="reference internal" href="save_load_rollback.html">Saving, Loading, and Rollback</a></li>
<li class="toctree-l1"><a class="reference internal" href="persistent.html">Persistent Data</a></li>
<li class="toctree-l1"><a class="reference internal" href="trans_trans_python.html">Transforms and Transitions in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="gui_advanced.html">Advanced GUI</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_python.html">Screens and Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="modes.html">Modes</a></li>
<li class="toctree-l1"><a class="reference internal" href="cdd.html">Creator-Defined Displayables</a></li>
<li class="toctree-l1"><a class="reference internal" href="cds.html">Creator-Defined Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="custom_text_tags.html">Custom Text Tags</a></li>
<li class="toctree-l1"><a class="reference internal" href="character_callbacks.html">Character Callbacks</a></li>
<li class="toctree-l1"><a class="reference internal" href="file_python.html">File Access</a></li>
<li class="toctree-l1"><a class="reference internal" href="color_class.html">Color Class</a></li>
<li class="toctree-l1"><a class="reference internal" href="matrix.html">Matrix</a></li>
<li class="toctree-l1"><a class="reference internal" href="model.html">Model-Based Rendering</a></li>
<li class="toctree-l1"><a class="reference internal" href="other.html">Other Functions and Variables</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="build.html">Building Distributions</a></li>
<li class="toctree-l1"><a class="reference internal" href="updater.html">Web Updater</a></li>
<li class="toctree-l1"><a class="reference internal" href="android.html">Android</a></li>
<li class="toctree-l1"><a class="reference internal" href="chromeos.html">Chrome OS/Chromebook</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">iOS</a></li>
<li class="toctree-l1"><a class="reference internal" href="iap.html">In-App Purchasing</a></li>
<li class="toctree-l1"><a class="reference internal" href="gesture.html">Gestures</a></li>
<li class="toctree-l1"><a class="reference internal" href="raspi.html">Raspberry Pi</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="security.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="problems.html">Dealing with Problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="environment_variables.html">Environment Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="self_voicing.html">Self-Voicing</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="editor.html">Text Editor Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="skins.html">Skins</a></li>
<li class="toctree-l1"><a class="reference internal" href="translating_renpy.html">Translating Ren'Py</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Ren'Py 7.x-)</a></li>
<li class="toctree-l1"><a class="reference internal" href="changelog6.html">Changelog (Ren'Py 6.11 - 6.99)</a></li>
<li class="toctree-l1"><a class="reference internal" href="incompatible.html">Incompatible Changes</a></li>
<li class="toctree-l1"><a class="reference internal" href="distributor.html">Distributor Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
<li class="toctree-l1"><a class="reference internal" href="sponsors.html">Ren'Py Development Sponsors</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="thequestion.html">Script of The Question</a></li>
<li class="toctree-l1"><a class="reference internal" href="thequestion_nvl.html">NVL-mode script for The Question</a></li>
</ul>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right" action="search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search" />
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-3">
<div id="sidebar" class="bs-sidenav" role="complementary"><ul>
<li><a class="reference internal" href="#">iOS</a><ul>
<li><a class="reference internal" href="#required-language">Required Language</a></li>
<li><a class="reference internal" href="#work-in-progress">Work in Progress</a></li>
<li><a class="reference internal" href="#platform-differences">Platform Differences</a></li>
<li><a class="reference internal" href="#testing-and-emulation">Testing and Emulation</a></li>
<li><a class="reference internal" href="#packaging">Packaging</a><ul>
<li><a class="reference internal" href="#getting-started">Getting Started</a></li>
<li><a class="reference internal" href="#creating-the-xcode-project">Creating the Xcode Project</a></li>
<li><a class="reference internal" href="#building-the-project">Building the Project</a></li>
<li><a class="reference internal" href="#updating-the-project">Updating the Project</a></li>
</ul>
</li>
<li><a class="reference internal" href="#customization">Customization</a><ul>
<li><a class="reference internal" href="#launch-storyboard">Launch Storyboard</a></li>
<li><a class="reference internal" href="#generation">Generation</a></li>
</ul>
</li>
<li><a class="reference internal" href="#pyobjus">Pyobjus</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="col-md-9 content">
<div class="section" id="ios">
<h1>iOS<a class="headerlink" href="#ios" title="Permalink to this headline"> link</a></h1>
<p>Ren'Py supports creating iOS apps that run on iPhone and iPad devices. As
creating an iOS app requires Apple-developed programs (like the Xcode IDE),
iOS apps can only be created on Macintosh computers.</p>
<div class="section" id="required-language">
<h2>Required Language<a class="headerlink" href="#required-language" title="Permalink to this headline"> link</a></h2>
<p>Some of the libraries used by Ren'Py on iOS are licensed under the terms
of the GNU Lesser/Library General Public License. You'll need to comply
with the terms of that license to distribute Ren'Py. We believe including
the following language in your app's description will suffice, but check
with a lawyer to be sure.</p>
<blockquote>
<div>This program contains free software licensed under a number of licenses,
including the GNU Lesser General Public License. A complete list of
software is available at <a class="reference external" href="https://www.renpy.org/l/license/">https://www.renpy.org/l/license/</a>.</div></blockquote>
</div>
<div class="section" id="work-in-progress">
<h2>Work in Progress<a class="headerlink" href="#work-in-progress" title="Permalink to this headline"> link</a></h2>
<p>The current Ren'Py iOS support is a work in progress. While it has been
used to release games to the Apple App Store, the default Ren'Py interface
does not comply with Apple's guidelines and will need to be changed.</p>
<p>Please let us know the results of getting your game through the App Store
approval process.</p>
</div>
<div class="section" id="platform-differences">
<h2>Platform Differences<a class="headerlink" href="#platform-differences" title="Permalink to this headline"> link</a></h2>
<p>iOS is similar to Android, but differs from the mouse-based platforms
that Ren'Py supports. All of the <a class="reference internal" href="android.html#android-platform-differences"><span class="std std-ref">android platform differences</span></a>
apply to iOS.</p>
<p>A list of video formats supported by iOS can be found
<a class="reference external" href="https://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/MediaLayer/MediaLayer.html#//apple_ref/doc/uid/TP40007898-CH9-SW6">here</a>.</p>
</div>
<div class="section" id="testing-and-emulation">
<h2>Testing and Emulation<a class="headerlink" href="#testing-and-emulation" title="Permalink to this headline"> link</a></h2>
<p>For testing purposes, Ren'Py supports two iOS emulation modes. These
are accessed from the iOS screen of the launcher. Both modes simulate
running on a touchscreen, such that events only reach the game when
the mouse button is down.</p>
<dl class="docutils">
<dt>iPhone</dt>
<dd>This mode emulates an iPhone.</dd>
<dt>Tablet</dt>
<dd>This mode emulates an iPad.</dd>
</dl>
<p>While these emulators can be used to quickly test your project, it's best to
also test on real hardware. The emulators do not deal with some human-factors
issues, like the size of a user's fingers.</p>
</div>
<div class="section" id="packaging">
<h2>Packaging<a class="headerlink" href="#packaging" title="Permalink to this headline"> link</a></h2>
<p>Packaging a Ren'Py game for iOS is currently an involved process compared
to the other platforms Ren'Py supports. We currently assume you have some
experience with creating iOS apps, or can follow Apple's instructions.</p>
<div class="section" id="getting-started">
<h3>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline"> link</a></h3>
<p>Before you can package a Ren'Py game, you'll need to set up your Macintosh
to create iOS applications. This means setting up Xcode on your Mac,
enrolling in the iOS Developer Program, and creating a provisioning
profile that allows your apps to run on your iOS device.</p>
<p>The Apple-written <a class="reference external" href="https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Introduction/Introduction.html">App Distribution Quick Start</a>
guide explains how to configure all of the above. We suggest working through
it, and even packaging a one of the template apps before moving on to
Ren'Py games.</p>
</div>
<div class="section" id="creating-the-xcode-project">
<h3>Creating the Xcode Project<a class="headerlink" href="#creating-the-xcode-project" title="Permalink to this headline"> link</a></h3>
<p>The first step in creating your iOS application is to create the Xcode project.
This is done by selecting &quot;Create Xcode Project&quot; from the iOS menu in the
Ren'Py launcher.</p>
<p>The name of the Xcode project is automatically chosen based on the name that
shows up in the launcher. The project is customized based this name, but
those customizations can be edited in Xcode.</p>
<p>Xcode projects created in this way are specific to a single version of
Ren'Py. After upgrading Ren'Py, you must create a new Xcode project for your
game, and repeat the project customizations.</p>
</div>
<div class="section" id="building-the-project">
<h3>Building the Project<a class="headerlink" href="#building-the-project" title="Permalink to this headline"> link</a></h3>
<p>After the project has been created in Ren'Py, it can be opened in Xcode by
choosing &quot;Launch Xcode&quot; from the launcher. Once the project is open in Xcode,
it can be built and installed on the iOS device.</p>
</div>
<div class="section" id="updating-the-project">
<h3>Updating the Project<a class="headerlink" href="#updating-the-project" title="Permalink to this headline"> link</a></h3>
<p>Choosing &quot;Update Xcode Project&quot; will copy the latest version of your
Ren'Py project into the Xcode project. This is suitable for when your project
files change, but not for when Ren'Py itself has been updated.</p>
</div>
</div>
<div class="section" id="customization">
<h2>Customization<a class="headerlink" href="#customization" title="Permalink to this headline"> link</a></h2>
<p>Most customization is performed in the Xcode project. For example, the
icon, launch images, and orientations are all customized in Xcode.</p>
<div class="section" id="launch-storyboard">
<h3>Launch Storyboard<a class="headerlink" href="#launch-storyboard" title="Permalink to this headline"> link</a></h3>
<p>When the application is run, the Launch Storyboard (configure as part of the
Xcode project, outside of Ren'Py) will be displayed until Ren'Py is ready
to display the game's user interface.</p>
<p>Once Ren'Py finishes initializing, it will either resume the current game,
or run the splashscreen and main menu.</p>
</div>
<div class="section" id="generation">
<h3>Generation<a class="headerlink" href="#generation" title="Permalink to this headline"> link</a></h3>
<p>To ease development, it's possible to have Ren'Py generate the iOS icon
images from files.</p>
<dl class="docutils">
<dt><code class="docutils literal notranslate"><span class="pre">ios-icon.png</span></code></dt>
<dd>If present, this file is scaled to the various sizes of png file
needed to make an iOS icon.</dd>
</dl>
</div>
</div>
<div class="section" id="pyobjus">
<span id="id1"></span><h2>Pyobjus<a class="headerlink" href="#pyobjus" title="Permalink to this headline"> link</a></h2>
<p>On iOS and macOS, a version of <a class="reference external" href="https://pyobjus.readthedocs.io/en/latest/">Pyobjus</a>
is available, allowing advanced creators to call system libraries.</p>
</div>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-right">
<a href="#">Back to top</a>
</p>
<p>
&copy; Copyright 2012-2022, Tom Rothamel.<br/>
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.6.<br/>
</p>
</div>
</footer>
</body>
</html>