Search Unity

Welcome to round two of our weekly blog update covering progress with stabilization and optimization of iOS 64-bit support in Unity 4.6 and 5.0! One of the most visible changes this week is that 5.0.1p1 includes the build size reductions that previously shipped in 4.6.4p2. You’ll also find further fixes to generics and WebRequest, amongst many others. We still highly recommend that all production teams working toward releasing iOS 64-bit titles adopt every patch release as it ships.

Remember:  All patch releases for 4.6 and 5.0 can be found at

And all monthly maintenance releases for 4.6 and 5.0 can be found at

And now for this week’s updates:

Status of 64-bit/Metal support in Unity 5.0.x

  • 5.0.1p1 shipped Wednesday, April 15.  The weekly 5.0.x patch release schedule resumed this week and and will continue going forward.  The build includes new fixes in addition to those introduced in 4.6.4p1 and 4.6.4p2.
  • Download and view the latest release notes for Unity 5.0.1p1 at

Status of 64-bit/Metal support in Unity 4.6

  • Unity 4.6.4p3 shipped today, April 17th.  In addition to a long list of il2cpp fixes, it contains new WebRequest fixes and first set of build size improvements.
  • Download and view the latest release notes for Unity 4.6.4p3 at

Our current release plan

  • 5.0 patch releases are scheduled to be released each week on Wednesdays.
  • 4.6 patch releases are scheduled to be released each week on Fridays.

Some important info to remember

  • It is necessary to update your projects to 4.6 at the very least to enjoy 64-bit support on iOS. 64-bit will only ship in 4.6.x and 5.x releases.
  • Apple has announced that they will require all apps on the store to include 64-bit support with any updates as of June 1, 2015.
  • We are doing weekly releases with all bugfixes. We can’t fix bugs if they’re not reported, so please report any issues with il2cpp builds the moment you discover them.
  • Internally, our developers collaborate on a single version of IL2CPP which is ported to 4.6 and 5.0 -based patch release branches at the last possible moment in order to release as many fixes and improvements as possible in each release. The cutoff date for fixes in each weekly patch release is several days before the release, to give us time to test and approve each release.

About the binary size increase issue

We’re still working hard behind the scenes to address increased runtime executable file sizes when using il2cpp.  Further improvements were addressed in 5.0.1p1 and 4.6.4p3 with more improvements underway.

For reference and more context about what is going on with iOS 64-bit and Apple’s requirements, please check out the blog post on iOS & ARM64 here, and our in-depth strategic plan for IL2CPP here.

Our plan is to update these posts on a weekly basis so make sure to check back next week to get a heads up on the latest progress with 64-bit iOS support and il2cpp!

4 replies on “iOS 64-bit and Metal update”

Please tell me what additional information you need from me to help troubleshoot the following problem…

I’ve updated to Unity 4.6.4p3 for my project, which is a realtime, multiplayer game that uses uLink networking. It builds and runs fine on iOS using the Mono (2.x) scripting backend, but when I change to IL2CPP, I get the following exception when attempting to load the scene that connects the client to the server…

-> 0x1d465dc : ldr r0, [r0, #0x28]
0x1d465e0 : bx lr

expanding the tree shows…

this NetworkManager * NULL 0x00000000
GlobalGameManager GlobalGameManager
GameManager GameManager
Object Object
m_MessageQueueRunning bool
m_Sendrate float
m_LastSendTime float
m_PeerType int
m_PlayerID int
m_HighestPlayerID int
m_MinimumAllocatableViewIDs int
m_Peer RakPeerInterface * NULL
m_Packet Packet * NULL
systemAddress SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
guid RakNetGUID
g uint64_t
systemIndex SystemIndex
length unsigned int
bitSize BitSize_t
rcvPort unsigned short
data unsigned char * NULL
*data unsigned char
deleteData bool
m_LevelPrefix int
m_BitStream RakNet::BitStream
numberOfBitsUsed BitSize_t
numberOfBitsAllocated BitSize_t
readOffset BitSize_t
data unsigned char * NULL
copyData bool
stackData unsigned char [256]
m_ServerAddress SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_ServerPassword std::string
_M_dataplus std::basic_string<char, std::char_traits, std::allocator >::_Alloc_hider
m_ServerGUID RakNetGUID
g uint64_t
systemIndex SystemIndex
m_RPCBuffer NetworkManager::RPCBuffer
m_Sources NetworkManager::NetworkViewList
m_Root ListElement
m_NonSyncSources NetworkManager::NetworkViewList
m_Root ListElement
m_AllSources NetworkManager::NetworkViewList
m_Root ListElement
m_Players NetworkManager::PlayerAddresses
m_DebugLevel int
m_NetworkViewIDAllocator NetworkViewIDAllocator
m_AllocatedViewIDBatches NetworkViewIDAllocator::AllocatedViewIDBatches
m_ReceivedBatches NetworkViewIDAllocator::ReceivedBatches
m_AvailableBatches NetworkViewIDAllocator::AvailableBatches
m_BatchSize int
m_MinAvailableViewIDs int
m_RequestedBatches int
m_ClientPlayer NetworkPlayer
m_ServerPlayer NetworkPlayer
m_SendingEnabled UInt32
m_ReceivedInitialState UInt32
m_DoNAT bool
m_NatPunchthrough NatPunchthroughClient
PluginInterface2 PluginInterface2
mostRecentNewExternalPort unsigned short
sp NatPunchthroughClient::SendPing
pc PunchthroughConfiguration
natPunchthroughDebugInterface NatPunchthroughDebugInterface * NULL
failedAttemptList DataStructures::List
m_FacilitatorID SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_ConnectingAfterPing bool
m_PingConnectTimestamp time_t
m_OldMasterServerID SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_OldFacilitatorID SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_UsedInitIndices dynamic_bitset
dynamic_bitset_base dynamic_bitset_base
m_ConnTester ConnectionTester * NULL
m_ConnStatus int
m_TestRunning int
m_Peer RakPeerInterface * NULL
m_NATPunchthrough NatPunchthroughClient
m_NatTypeDetection RakNet::NatTypeDetectionClient * NULL
m_ConnTesterAddress SystemAddress
m_Timestamp time_t
m_ConnStatus int
m_ConnTesterAddress SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_MaxConnections int
m_PingThread Thread
m_Thread PlatformThread
m_UserData void * NULL
m_EntryPoint void *(*)(void *) NULL
m_Running bool
m_ShouldQuit bool
m_Priority ThreadPriority
m_Name const char * NULL
m_PingQueue NetworkManager::PingQueue
c std::deque<Ping *, std::allocator >
m_ProxyAddress SystemAddress
binaryAddress uint32_t
port unsigned short
systemIndex SystemIndex
m_UseProxy bool
m_ProxyPassword std::string
_M_dataplus std::basic_string<char, std::char_traits, std::allocator >::_Alloc_hider
m_RelayPort unsigned short
m_AssetToPrefab NetworkManager::AssetToPrefab
m_PrefabToAsset NetworkManager::PrefabToAsset

The last update seems to have fixed everything for my game. All seems to be working … let’s hope 5.0.1.p2 doesn’t break it. :)

Saw some massive (or very noticeable) speed improvements using Metal. Before I wasn’t using it because it was so buggy that the game crashed a lot.

Now the game crashes on (At least) the iPhone 6 with Open GL ES 3, so I’m a bit worried that non-metal devices will end up crashing if the graphics goes back to that instead automatically. I’m also getting a graphics error (visual) when using shadows & Metal, where the characters seems to turn into solid colors for single frames.

Hopefully future patch releases will fix this.

Comments are closed.