Packages
mob
0.5.5
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
lib/mob/storage/apple.ex
defmodule Mob.Storage.Apple do
@moduledoc """
iOS-specific storage locations and media library integration.
## Locations
All locations from `Mob.Storage` plus:
- `:icloud` — iCloud Drive container for this app; `nil` if iCloud is
unavailable or the user has not signed in
## File sharing
`Documents/` is user-visible in the Files app only when
`UIFileSharingEnabled` is set in your `Info.plist`. Run:
mix mob.enable file_sharing
to add that key. Without it, `dir(:documents)` still works but the
directory is invisible outside the app.
## Photo library
`save_to_photo_library/2` saves any image or video file to the user's
Camera Roll. It is asynchronous — the result arrives via `handle_info`:
handle_info({:storage, :saved_to_library, path}, socket)
handle_info({:storage, :error, :save_to_library, reason}, socket)
Requires `NSPhotoLibraryAddUsageDescription` in `Info.plist`:
mix mob.enable photo_library
"""
@locations [:temp, :documents, :cache, :app_support, :icloud]
@doc """
Resolve a location atom to its absolute path.
Returns `nil` for `:icloud` when iCloud is unavailable.
"""
@spec dir(atom()) :: String.t() | nil
def dir(location) when location in @locations do
case :mob_nif.storage_dir(location) do
nil -> nil
path -> IO.iodata_to_binary(path)
end
end
@doc """
Save a file to the user's Camera Roll (photo library).
Type (`:image` or `:video`) is inferred from the file extension.
"""
@spec save_to_photo_library(Mob.Socket.t(), String.t()) :: Mob.Socket.t()
def save_to_photo_library(socket, path) do
:mob_nif.storage_save_to_photo_library(path)
socket
end
end