Service Locator with Lazy Loading in Swift
This is mostly good, but it can be improved.
You might want to constrain the Resolver and Register protocols to classes. Since you want to share instances this won’t work with structs.
protocol Register: class { ... }

Your store property doesn’t have to be lazy. Initializing an empty dictionary is cheap, so you can do that directly when your LazyServiceLocator is initialized.
The biggest issue I found is the ObjectIdentifier you use as the dictionary key. You don’t store the type of T (which would be T.self) but the type of the type of T - it’s metatype. I’m not quite sure if this can lead to problems, but it is unnecessary. Just use ObjectIdentifier(T.self).
The other thing you might want to consider is renaming your register(reference:) method to register(factory:). Calling something that creates an object reference is rather uncommon.
And finally you might want to consider adding an overload for resolve that takes the requested type as a parameter:
extension Resolver {
    func resolve&lt;T&gt;(_ type: T.Type) -&gt; T {
        return resolve()
    }
}

With that you can write let x = resolve(Foo.self) instead of let x: Foo = resolve(). IMHO this is a bit more readable.